项目

内容

这个作业属于哪个课程

https://www.cnblogs.com/nwnu-daizh/

这个作业的要求在哪里

https://www.cnblogs.com/nwnu-daizh/p/11435127.html

作业学习目标

(1)掌握GUI布局管理器用法;

(2)掌握Java Swing文本输入组件用途及常用API;

(3)掌握Java Swing选择输入组件用途及常用API。

第一部分:总结第十二章本周理论知识

 

1.布局管理器

a 布局管理器是一组类。

b 实现java.awt.LayoutManager接口

c 决定容器中组件的位置和大小

d Java.awt包中定义了5种布局管理类,每一种布 局管理类对应一种布局策略。

e 每个容器都有与之相关的默认布局管理器。

f 当一个容器选定一种布局策略时,它应该创建该 策略对应的布局管理器对象,并将此对象设置为 自己的布局管理器。

g 5种布局管理器

(1)FlowLayout:流布局(Applet和Panel的默认 布局管理器)

(2)BorderLayout:边框布局(Window、Frame和 Dialog的默认布局管理器)

(3)GridLayout:网格布局

(4)GridBagLayout:网格组布局

(5)CardLayout:卡片布局

2.Swing和MVC设计模式

(1)设计模式(Design pattern)是设计者一种流行的 思考设计问题的方法,是一套被反复使用,多数人 知晓的,经过分类编目的,代码设计经验的总结。

(2)模型-视图-控制器设计模式(Model –ViewController )是Java EE平台下创建 Web 应用程序 的重要设计模式。

(3)MVC设计模式 – Model(模型):是程序中用于处理程序数据逻 辑的部分,通常模型负责在数据库中存取数据。

– View(视图):是程序中处理数据显示的部分, 通常视图依据模型存取的数据创建。

– Controller(控制器):是程序中处理用户交互 的部分。通常控制器负责从视图读取数据,控制 用户输入,并向模型发送数据。

(4)Java组件有内容、外观、行为三个主要元素;

3.文本输入

(1)文本域(JTextField) : 用于获取单行文本输入。

(2)文本区(JTextArea)组件可让用户输入多行文 本。生成JTextArea组件对象时,可以指定文本 区的行数和列数: textArea = new JTextArea(8, 40);

(3)文本区与文本域的异同相同之处: 文本域和文本区组件都可用于获取文本输入。

不同之处:  文本域只能接受单行文本的输入;  文本区能够接受多行文本的输入。

(4)文本区JTextArea的常用API:Java.swing. JTextArea 1.2 – JTextArea(int rows, int cols)

构造一个rows行cols列的文本区对象 – JTextArea(String text,int rows, int cols)

用初始文本构造一个文本区对象 – void setRows(int rows)

设置文本域使用的行数 – void append(String newText)

将给定文本附加到文本区中已有文本的后面 – void setLineWrap(boolean wrap)

打开或关闭换行

(5)标签组件:标签是容纳文本的组件。它们没有任何修饰(如没有边界 ),也不响应用户输入。

 标签的常用用途之一就是标识组件,例如标识文本域。其使用步骤如下:

4.选择组件

复选框  单选按钮  边框  组合框  滑动条

(1)复选框构造器 1.bold = new JCheckBox("Bold"); 复选框自动地带有表示标签。 JCheckBox(String label,Icon icon); 构造带有标签与图标的复选框,默认初始未被选择。JCheckBox(String label,boolean state); 用指定的标签和初始化选择状态构造一个复选框单选按钮的构造器(教材492页) 1.JRadioButton(String label,Icon icon); 创建一个带标签和图标的单选按钮RadioButton(String label,boolean state); 用指定的标签和初始化状态构造单选按钮按钮组:为单选按钮组构造一个ButtonGroup的对象。 然后,再将JRadioButton类型的对象添加到按钮 组中。按钮组负责在新按钮被按下的时,取消前一 个按钮的选择状态。如果在一个窗口中 有多组复选框或单选按 钮,就需要可视化的形 式指明哪些按钮属于同 一组。Swing提供了一 组很有用的边框)如果有多个选择项,使用单选按钮占据的屏幕空 间太大时,就可以选择组合框。组合框的事件监听:为了判断组合框的哪个选项被选择,可通过 事件参数调用getSource方法来得到发送事件的组 合框引用,接着调用getSelectdeItem方法获取当 前选择的选项。滑动条:滑动条可以让用户从一组离散值中进行选择 ,并且它还允许进行连续值得选择。

5.菜单

菜单创建  菜单项中的图标  复选框和单选按钮菜单项  弹出菜单  快捷键和加速器  启用和禁用菜单项  工具栏  工具提示

网格组布局 (GridBagLayout):GridBagLayout与GridLayout有点相似,它也是 将组件排在格子里,但是GridBagLayout在网格 的基础上提供更复杂的布局。

GridBagLayout允许单个组件在一个单元中不填 满整个单元,而只是占用最佳大小,也允许单个 组件扩展成不止一个单元,并且可以用任意顺序 加入组件。

定制布局管理器: 程序员可通过自己设计LayoutManager类来实现 特殊的布局方式。定制布局管理器需要实现LayoutManager接口, 并覆盖以下方法。

6. 对话框

选项对话框   创建对话框   数据选择   文件对话框  颜色选择器

(1)对话框是一种大小不能变化、不能有菜单的容器窗口; 对话框不能作为一个应用程序的主框架,而必须包含在其 他的容器中。

(2)选项对话框:JOptionPane提供的对话框是模式对话框。当模 式对话框显示时,它不允许用户输入到程序的 其他的窗口。使用JOptionPane,可以创建和自 定义问题、信息、警告和错误等几种类型的对 话框。

(3)数据交换:输入对话框含有供用户输入文本的文本框、一个确认和取 消按钮,是有模式对话框。当输入对话框可见时,要求用户 输入一个字符串。

(4)文件对话框:专门用于对文件(或目录)进行浏览和选择的对 话框,常用的构造方法: – JFileChooser():根据用户的缺省目录创建文件对话框 – JFileChooser(File currentDirectory):根据File型参数 currentDirectory指定的目录创建文件对话框

(5)颜色对话框: javax.swing包中的JColorChooser类的静态方 法: public static Color showDialog(Component component, String title, Color initialColor)创建一个颜色对话框

(6)参数component指定对话框所依赖的组件,title 指定对话框的标题;initialColor 指定对话框返回 的初始颜色,即对话框消失后,返回的默认值。 颜色对话框可根据用户在颜色对话框中选择的颜 色返回一个颜色对象.

第二部分:实验部分

1、实验目的与要求

(1)掌握GUI布局管理器用法;

(2)掌握Java Swing文本输入组件用途及常用API;

(3)掌握Java Swing选择输入组件用途及常用API;

2、实验内容和步骤

实验1: 导入第12章示例程序,测试程序并进行组内讨论。

测试程序1

在elipse IDE中运行教材479页程序12-1,结合运行结果理解程序;

掌握布局管理器的用法;

理解GUI界面中事件处理技术的用途。

在布局管理应用代码处添加注释;

  1. package calculator;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import javax.swing.*;
  6.  
  7. /**
  8. * A panel with calculator buttons and a result display.
  9. */
  10. public class CalculatorPanel extends JPanel
  11. {
  12. //属性
  13. private JButton display;
  14. private JPanel panel;
  15. private double result;
  16. private String lastCommand;
  17. private boolean start;
  18. //构造器
  19. public CalculatorPanel()
  20. {
  21. setLayout(new BorderLayout());//设定新的边框布局管理器
  22.  
  23. result = 0;
  24. lastCommand = "=";
  25. start = true;
  26.  
  27. // 添加display
  28.  
  29. display = new JButton("0");//用来显示完成算式计算结果
  30. display.setEnabled(false);//使得使能属性不能起作用
  31. add(display, BorderLayout.NORTH);//将display添加到北部区域
  32. //生成监听器对象
  33. ActionListener insert = new InsertAction();
  34. ActionListener command = new CommandAction();
  35.  
  36. // 在4 x 4网格中添加按钮
  37.  
  38. panel = new JPanel();//新建窗格组件
  39. panel.setLayout(new GridLayout(4, 4));//设定4行4列的网格布局管理器
  40. //生成16个事件源,数字注册的事件源是insert对象,运算符注册的事件源是command对象
  41. addButton("7", insert);
  42. addButton("8", insert);
  43. addButton("9", insert);
  44. addButton("/", command);
  45.  
  46. addButton("4", insert);
  47. addButton("5", insert);
  48. addButton("6", insert);
  49. addButton("*", command);
  50.  
  51. addButton("1", insert);
  52. addButton("2", insert);
  53. addButton("3", insert);
  54. addButton("-", command);
  55.  
  56. addButton("0", insert);
  57. addButton(".", insert);
  58. addButton("=", command);
  59. addButton("+", command);
  60.  
  61. add(panel, BorderLayout.CENTER);//将panel添加到中部区域
  62.  
  63. }
  64.  
  65. /**
  66. * Adds a button to the center panel.
  67. * @param label the button label
  68. * @param listener the button listener
  69. */
  70. //方法
  71. private void addButton(String label, ActionListener listener)
  72. {
  73. JButton button = new JButton(label);//生成按钮对象
  74. button.addActionListener(listener);//注册监听器对象
  75. panel.add(button);//将其添加到窗格中
  76. }
  77.  
  78. /**
  79. * This action inserts the button action string to the end of the display text.
  80. */
  81. //内部类
  82. private class InsertAction implements ActionListener
  83. {
  84. public void actionPerformed(ActionEvent event)
  85. {
  86. String input = event.getActionCommand();
  87. if (start)//开始计算
  88. {
  89. display.setText("");
  90. start = false;
  91. }
  92. display.setText(display.getText() + input);//完成多个数字的输入操作
  93. }
  94. }
  95.  
  96. /**
  97. * This action executes the command that the button action string denotes.
  98. */
  99. //内部类
  100. private class CommandAction implements ActionListener
  101. {
  102. public void actionPerformed(ActionEvent event)
  103. {
  104. String command = event.getActionCommand();
  105.  
  106. if (start)//开始计算还没有输入数字
  107. {
  108.  
  109. if (command.equals("-"))
  110. {
  111. display.setText(command);//显示符号
  112. start = false;
  113. }
  114. else lastCommand = command;
  115. }
  116. else
  117. {
  118. calculate(Double.parseDouble(display.getText()));//将数字字符串转化为数字
  119. lastCommand = command;
  120. start = true;
  121. }
  122. }
  123. }
  124.  
  125. /**
  126. * Carries out the pending calculation.
  127. * @param x the value to be accumulated with the prior result.
  128. */
  129. //计算方法
  130. public void calculate(double x)
  131. {
  132. if (lastCommand.equals("+")) result += x;
  133. else if (lastCommand.equals("-")) result -= x;
  134. else if (lastCommand.equals("*")) result *= x;
  135. else if (lastCommand.equals("/")) result /= x;
  136. else if (lastCommand.equals("=")) result = x;
  137. display.setText("" + result);//将数字转化为数字字符串输出
  138. }
  139. }

  

  1. package calculator;
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5.  
  6. /**
  7. * @version 1.34 2015-06-12
  8. * @author Cay Horstmann
  9. */
  10. public class Calculator
  11. {
  12. public static void main(String[] args)
  13. {
  14. EventQueue.invokeLater(() -> {
  15. CalculatorFrame frame = new CalculatorFrame();
  16. frame.setTitle("Calculator");//设置标题
  17. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭
  18. frame.setVisible(true);//设置可见
  19. });
  20. }
  21. }
  1. package calculator;
  2.  
  3. import javax.swing.*;
  4.  
  5. /**
  6. * A frame with a calculator panel.
  7. */
  8. public class CalculatorFrame extends JFrame
  9. {
  10. public CalculatorFrame()
  11. {
  12. add(new CalculatorPanel());
  13. pack();
  14. }
  15. }

运行结果:

测试程序2

在elipse IDE中调试运行教材486页程序12-2,结合运行结果理解程序;

掌握文本组件的用法;

记录示例代码阅读理解中存在的问题与疑惑。

  1. package text;
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5.  
  6. /**
  7. * @version 1.41 2015-06-12
  8. * @author Cay Horstmann
  9. */
  10. public class TextComponentTest
  11. {
  12. public static void main(String[] args)
  13. {
  14. EventQueue.invokeLater(() -> {
  15. JFrame frame = new TextComponentFrame();
  16. frame.setTitle("TextComponentTest");
  17. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  18. frame.setVisible(true);
  19. });
  20. }
  21. }
  1. package text;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.GridLayout;
  5.  
  6. import javax.swing.JButton;
  7. import javax.swing.JFrame;
  8. import javax.swing.JLabel;
  9. import javax.swing.JPanel;
  10. import javax.swing.JPasswordField;
  11. import javax.swing.JScrollPane;
  12. import javax.swing.JTextArea;
  13. import javax.swing.JTextField;
  14. import javax.swing.SwingConstants;
  15.  
  16. /**
  17. * 带有输入文本框组件的框架。
  18. */
  19. public class TextComponentFrame extends JFrame
  20. {
  21. public static final int TEXTAREA_ROWS = 8;
  22. public static final int TEXTAREA_COLUMNS = 20;
  23.  
  24. public TextComponentFrame()
  25. {
  26. JTextField textField = new JTextField();
  27. JPasswordField passwordField = new JPasswordField();
  28.  
  29. JPanel northPanel = new JPanel();
  30. northPanel.setLayout(new GridLayout(2, 2));
  31. //SwingConstants通常用于在屏幕上定位或定向组件的常量的集合
  32. northPanel.add(new JLabel("User name: ", SwingConstants.RIGHT));
  33. northPanel.add(textField);
  34. northPanel.add(new JLabel("Password: ", SwingConstants.RIGHT));
  35. northPanel.add(passwordField);
  36.  
  37. add(northPanel, BorderLayout.NORTH);
  38.  
  39. //构造具有指定行数和列数的新的空 TextArea。
  40. JTextArea textArea = new JTextArea(TEXTAREA_ROWS, TEXTAREA_COLUMNS);
  41. //创建一个显示指定组件内容的 JScrollPane对象,只要组件的内容超过视图大小就会显示水平和垂直滚动条。
  42. JScrollPane scrollPane = new JScrollPane(textArea);
  43.  
  44. add(scrollPane, BorderLayout.CENTER);
  45.  
  46. // add button to append text into the text area
  47.  
  48. JPanel southPanel = new JPanel();
  49.  
  50. JButton insertButton = new JButton("Insert");
  51. southPanel.add(insertButton);
  52. //将给定文本追加到文档结尾。
  53. insertButton.addActionListener(event ->
  54. textArea.append("User name: " + textField.getText() + " Password: "
  55. + new String(passwordField.getPassword()) + "\n"));
  56.  
  57. add(southPanel, BorderLayout.SOUTH);
  58. pack();
  59. }
  60. }

运行结果:

测试程序3

在elipse IDE中调试运行教材489页程序12-3,结合运行结果理解程序;

掌握复选框组件的用法;

记录示例代码阅读理解中存在的问题与疑惑。

  1. package checkBox;
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5.  
  6. /**
  7. * @version 1.34 2015-06-12
  8. * @author Cay Horstmann
  9. */
  10. public class CheckBoxTest
  11. {
  12. public static void main(String[] args)
  13. {
  14. EventQueue.invokeLater(() -> {
  15. JFrame frame = new CheckBoxFrame();
  16. frame.setTitle("CheckBoxTest");
  17. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  18. frame.setVisible(true);
  19. });
  20. }
  21. }
  1. package checkBox;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import javax.swing.*;
  6.  
  7. /**
  8. * A frame with a sample text label and check boxes for selecting font attributes.
  9. */
  10. public class CheckBoxFrame extends JFrame
  11. {
  12. private JLabel label;
  13. private JCheckBox bold;
  14. private JCheckBox italic;
  15. private static final int FONTSIZE = 24;
  16.  
  17. public CheckBoxFrame()
  18. {
  19. // 添加示例文本标签
  20.  
  21. label = new JLabel("The quick brown fox jumps over the lazy dog.");
  22. label.setFont(new Font("Serif", Font.BOLD, FONTSIZE));
  23. add(label, BorderLayout.CENTER);
  24.  
  25. // 字体属性
  26. // 复选框状态的标签
  27.  
  28. ActionListener listener = event -> {
  29. int mode = 0;
  30. if (bold.isSelected()) mode += Font.BOLD;
  31. if (italic.isSelected()) mode += Font.ITALIC;
  32. label.setFont(new Font("Serif", mode, FONTSIZE));
  33. };
  34.  
  35. // 添加复选框
  36.  
  37. JPanel buttonPanel = new JPanel();
  38.  
  39. bold = new JCheckBox("Bold");
  40. bold.addActionListener(listener);
  41. bold.setSelected(true);
  42. buttonPanel.add(bold);
  43.  
  44. italic = new JCheckBox("Italic");
  45. italic.addActionListener(listener);
  46. buttonPanel.add(italic);
  47.  
  48. add(buttonPanel, BorderLayout.SOUTH);
  49. pack();
  50. }
  51. }

运行结果:

测试程序4

在elipse IDE中调试运行教材491页程序12-4,运行结果理解程序;

掌握单选按钮组件的用法;

记录示例代码阅读理解中存在的问题与疑惑。

  1. package radioButton;
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5.  
  6. /**
  7. * @version 1.34 2015-06-12
  8. * @author Cay Horstmann
  9. */
  10. public class RadioButtonTest
  11. {
  12. public static void main(String[] args)
  13. {
  14. EventQueue.invokeLater(() -> {
  15. JFrame frame = new RadioButtonFrame();
  16. frame.setTitle("RadioButtonTest");
  17. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  18. frame.setVisible(true);
  19. });
  20. }
  21. }
  1. package radioButton;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import javax.swing.*;
  6.  
  7. /**
  8. * 带有示例文本标签和用于选择字体大小的单选按钮的框架。
  9. */
  10. public class RadioButtonFrame extends JFrame
  11. {
  12. private JPanel buttonPanel;
  13. private ButtonGroup group;
  14. private JLabel label;
  15. private static final int DEFAULT_SIZE = 36;
  16.  
  17. public RadioButtonFrame()
  18. {
  19. // add the sample text label
  20.  
  21. label = new JLabel("The quick brown fox jumps over the lazy dog.");
  22. label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE));
  23. add(label, BorderLayout.CENTER);
  24.  
  25. // add the radio buttons
  26.  
  27. buttonPanel = new JPanel();
  28. group = new ButtonGroup();
  29.  
  30. addRadioButton("Small", 8);
  31. addRadioButton("Medium", 12);
  32. addRadioButton("Large", 18);
  33. addRadioButton("Extra large", 36);
  34.  
  35. add(buttonPanel, BorderLayout.SOUTH);
  36. pack();
  37. }
  38.  
  39. /**
  40. * 添加一个单选按钮,用于设置示例文本的字体大小。
  41. * @param 大小的规格要出现在按钮上的字符串
  42. * @param 按钮设置的字体大小
  43. */
  44. public void addRadioButton(String name, int size)
  45. {
  46. boolean selected = size == DEFAULT_SIZE;
  47. JRadioButton button = new JRadioButton(name, selected);
  48. group.add(button);
  49. buttonPanel.add(button);
  50.  
  51. // 此监听器设置标签字体大小
  52.  
  53. ActionListener listener = event -> label.setFont(new Font("Serif", Font.PLAIN, size));
  54.  
  55. button.addActionListener(listener);
  56. }
  57. }

运行结果:

测试程序5

在elipse IDE中调试运行教材494页程序12-5,结合运行结果理解程序;

掌握边框的用法;

记录示例代码阅读理解中存在的问题与疑惑。

  1. package border;
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5.  
  6. /**
  7. * @version 1.34 2015-06-13
  8. * @author Cay Horstmann
  9. */
  10. public class BorderTest
  11. {
  12. public static void main(String[] args)
  13. {
  14. EventQueue.invokeLater(() -> {
  15. JFrame frame = new BorderFrame();
  16. frame.setTitle("BorderTest");
  17. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  18. frame.setVisible(true);
  19. });
  20. }
  21. }
  1. package border;
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5. import javax.swing.border.*;
  6.  
  7. /**
  8. * A frame with radio buttons to pick a border style.
  9. */
  10. public class BorderFrame extends JFrame
  11. {
  12. private JPanel demoPanel;
  13. private JPanel buttonPanel;
  14. private ButtonGroup group;
  15.  
  16. public BorderFrame()
  17. {
  18. demoPanel = new JPanel();
  19. buttonPanel = new JPanel();
  20. group = new ButtonGroup();
  21.  
  22. //设置不同的边框类型按钮,共六种(提供标准 Border 对象的工厂类)
  23. addRadioButton("Lowered bevel", BorderFactory.createLoweredBevelBorder());
  24. addRadioButton("Raised bevel", BorderFactory.createRaisedBevelBorder());
  25. addRadioButton("Etched", BorderFactory.createEtchedBorder());
  26. addRadioButton("Line", BorderFactory.createLineBorder(Color.BLUE));
  27. addRadioButton("Matte", BorderFactory.createMatteBorder(10, 10, 10, 10, Color.BLUE));
  28. addRadioButton("Empty", BorderFactory.createEmptyBorder());
  29.  
  30. Border etched = BorderFactory.createEtchedBorder();
  31. Border titled = BorderFactory.createTitledBorder(etched, "Border types");
  32. buttonPanel.setBorder(titled);
  33.  
  34. setLayout(new GridLayout(2, 1));
  35. add(buttonPanel);
  36. add(demoPanel);
  37. pack();
  38. }
  39.  
  40. public void addRadioButton(String buttonName, Border b)
  41. {
  42. JRadioButton button = new JRadioButton(buttonName);
  43. button.addActionListener(event -> demoPanel.setBorder(b));
  44. group.add(button);
  45. buttonPanel.add(button);
  46. }
  47. }

运行结果:

测试程序6

在elipse IDE中调试运行教材498页程序12-6,结合运行结果理解程序;

掌握组合框组件的用法;

记录示例代码阅读理解中存在的问题与疑惑。

  1. package comboBox;
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5.  
  6. /**
  7. * @version 1.35 2015-06-12
  8. * @author Cay Horstmann
  9. */
  10. public class ComboBoxTest
  11. {
  12. public static void main(String[] args)
  13. {
  14. //lambda表达式
  15. EventQueue.invokeLater(() -> {
  16.  
  17. JFrame frame = new ComboBoxFrame();
  18.  
  19. frame.setTitle("ComboBoxTest");
  20.  
  21. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22.  
  23. frame.setVisible(true);
  24. });
  25. }
  26. }
  1. package comboBox;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Font;
  5.  
  6. import javax.swing.JComboBox;
  7. import javax.swing.JFrame;
  8. import javax.swing.JLabel;
  9. import javax.swing.JPanel;
  10.  
  11. /**
  12. * 具有示例文本标签和用于选择字体外观的组合框的框架。
  13. * 组合框:将按钮或可编辑字段与下拉列表组合的组件。
  14. * 用户可以从下拉列表中选择值,下拉列表在用户请求时显示
  15. */
  16.  
  17. public class ComboBoxFrame extends JFrame
  18. {
  19. private JComboBox<String> faceCombo;
  20. private JLabel label;
  21. private static final int DEFAULT_SIZE = 24;
  22.  
  23. public ComboBoxFrame()
  24. {
  25. // 添加示例文本标签
  26.  
  27. label = new JLabel("The quick brown fox jumps over the lazy dog.");
  28.  
  29. label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE));
  30. //添加到边框布局管理器的中间
  31. add(label, BorderLayout.CENTER);
  32.  
  33. // 创建一个组合框对象并添加项目名称
  34.  
  35. faceCombo = new JComboBox<>();
  36. faceCombo.addItem("Serif");
  37. faceCombo.addItem("SansSerif");
  38. faceCombo.addItem("Monospaced");
  39. faceCombo.addItem("Dialog");
  40. faceCombo.addItem("DialogInput");
  41.  
  42. // 组合框监听器将标签字体更改为所选的名称(添加监听器,使用lambda表达式)
  43.  
  44. faceCombo.addActionListener(event ->
  45.  
  46. label.setFont(
  47. //getItemAt用于返回指定索引处的列表项;getSelectedIndex用于返回当前选择的选项
  48. new Font(faceCombo.getItemAt(faceCombo.getSelectedIndex()),
  49. Font.PLAIN, DEFAULT_SIZE)));
  50.  
  51. JPanel comboPanel = new JPanel();
  52. comboPanel.add(faceCombo);
  53. add(comboPanel, BorderLayout.SOUTH);
  54. pack();
  55. }
  56. }

运行结果:

实验2:结对编程练习                    

利用所掌握的GUI技术,设计一个用户信息采集程序,要求如下:

(1)  用户信息输入界面如下图所示:

(2)  用户点击提交按钮时,用户输入信息显示在录入信息显示区,格式如下:

(3)  用户点击重置按钮后,清空用户已输入信息;

(4)  点击窗口关闭,程序退出。

一、编程设计思路:

根据题目要求先设计

1,四个面板还有一个TextArea域,布局采用网格 布局设置为四行一列的面板布局,不同面板之间间距为五十个像素

2,给每个按钮 添加不同的事件监听器

二、编程代码:

  1. package border;
  2. import java.awt.EventQueue;
  3.  
  4. import javax.swing.JFrame;
  5.  
  6. public class Mian {
  7. public static void main(String[] args) {
  8. EventQueue.invokeLater(() -> {
  9. DemoJFrame page = new DemoJFrame();
  10. });
  11. }
  12. }
  1. package border;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Dimension;
  6. import java.awt.FlowLayout;
  7. import java.awt.GridLayout;
  8. import java.awt.LayoutManager;
  9. import java.awt.Panel;
  10. import java.awt.TextArea;
  11. import java.awt.event.ActionEvent;
  12. import java.awt.event.ActionListener;
  13. import java.io.BufferedReader;
  14. import java.io.File;
  15. import java.io.FileInputStream;
  16. import java.io.IOException;
  17. import java.io.InputStreamReader;
  18. import java.util.ArrayList;
  19. import java.util.Timer;
  20. import java.util.TimerTask;
  21.  
  22. import javax.swing.BorderFactory;
  23. import javax.swing.ButtonGroup;
  24. import javax.swing.ButtonModel;
  25. import javax.swing.JButton;
  26. import javax.swing.JCheckBox;
  27. import javax.swing.JComboBox;
  28. import javax.swing.JFrame;
  29. import javax.swing.JLabel;
  30. import javax.swing.JPanel;
  31. import javax.swing.JRadioButton;
  32. import javax.swing.JTextField;
  33. import javax.swing.border.Border;
  34.  
  35. public class DemoJFrame extends JFrame {
  36. private JPanel Panel1;
  37. private JPanel Panel2;
  38. private JPanel Panel3;
  39. private JPanel Panel4;
  40. private TextArea Area;
  41. private JTextField fieldname;
  42. private JComboBox comboBox;
  43. private JTextField fieldadress;
  44. private ButtonGroup bg;
  45. private JRadioButton man;
  46. private JRadioButton women;
  47. private JCheckBox sing;
  48. private JCheckBox dance;
  49. private JCheckBox draw;
  50. private JButton button1;
  51. private JButton button2;
  52. String sex;
  53.  
  54. public DemoJFrame() {
  55. // 设置窗口大小
  56. this.setSize(500, 500);
  57. // 设置可见性
  58. this.setVisible(true);
  59. // 设置标题
  60. this.setTitle("UserGUITest");
  61. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  62. Panel1 = new JPanel();
  63. setJPanel1(Panel1);
  64. Panel2 = new JPanel();
  65. setJPanel2(Panel2);
  66. Panel3 = new JPanel();
  67. setJPanel3(Panel3);
  68. this.add(Panel1);
  69. this.add(Panel2);
  70. this.add(Panel3);
  71. JPanel Panelmax = new JPanel();
  72. Panelmax.add(Panel2);
  73. Panelmax.add(Panel3);
  74. this.add(Panelmax);
  75. button1 = new JButton("提交");
  76. button2 = new JButton("重置");
  77. Panel op = new Panel();
  78. op.add(button1);
  79. op.add(button2);
  80. this.add(op);
  81. Panel4 = new JPanel();
  82. setJPanel4(Panel4);
  83. this.add(Panel4);
  84. button1.addActionListener((e) -> valiData());
  85. button2.addActionListener((e) -> Reset());
  86. setLayout(new GridLayout(4, 1, 0, 50));
  87. }
  88.  
  89. /*
  90. * 设置面板一
  91. */
  92. private void setJPanel1(JPanel jPanel) {
  93. JLabel name = new JLabel("姓名:");
  94. // name.setSize(100, 50);
  95. fieldname = new JTextField(8);
  96. JLabel address = new JLabel("地址:");
  97. fieldadress = new JTextField(15);
  98. // address.setSize(100, 50);
  99. jPanel.add(name);
  100. jPanel.add(fieldname);
  101. jPanel.add(address);
  102. jPanel.add(fieldadress);
  103. // this.add(Panel1,BorderLayout.NORTH);
  104. }
  105.  
  106. /*
  107. * 设置面板二
  108. */
  109. private void setJPanel2(JPanel jPanel) {
  110. // JLabel sex = new JLabel("性别");
  111. JPanel selectBox = new JPanel();
  112. Border etched = BorderFactory.createEtchedBorder();
  113. Border titled = BorderFactory.createTitledBorder("性別");
  114. jPanel.setBorder(titled);
  115. // selectBox.setLayout(new GridLayout(2, 1));
  116. bg = new ButtonGroup();
  117. man = new JRadioButton("男");
  118. women = new JRadioButton("女");
  119. bg.add(man);
  120. bg.add(women);
  121. selectBox.add(man);
  122. selectBox.add(women);
  123. // jPanel.add(sex);
  124. jPanel.add(selectBox);
  125. // this.add(Panel2,BorderLayout.WEST);
  126. }
  127.  
  128. /*
  129. * 设置面板三
  130. */
  131. private void setJPanel3(JPanel jPanel) {
  132. // JLabel study = new JLabel("爱好:");
  133. JPanel selectBox = new JPanel();
  134. Border titled2 = BorderFactory.createTitledBorder("爱好");
  135. jPanel.setBorder(titled2);
  136. // selectBox.setBorder(BorderFactory.createTitledBorder(""));
  137. sing = new JCheckBox("唱歌");
  138. dance = new JCheckBox("跳舞");
  139. draw = new JCheckBox("阅读");
  140. selectBox.add(sing);
  141. selectBox.add(dance);
  142. selectBox.add(draw);
  143. jPanel.add(selectBox);
  144. }
  145.  
  146. /*
  147. * 设置面板四
  148. */
  149. private void setJPanel4(JPanel jPanel) {
  150.  
  151. Area = new TextArea(" 录入信息显示区!");
  152. Panel4.add(Area);
  153. this.add(Panel4);
  154. this.add(Panel4, BorderLayout.SOUTH);
  155. }
  156.  
  157. private void valiData() {
  158. String name = fieldname.getText().toString().trim();
  159. String address = fieldadress.getText().toString().trim();
  160. System.out.println(name);
  161. String hobbystring = "";
  162. if (sing.isSelected()) {
  163. hobbystring += "唱歌 ";
  164. }
  165. if (dance.isSelected()) {
  166. hobbystring += "跳舞 ";
  167. }
  168. if (draw.isSelected()) {
  169. hobbystring += "阅读 ";
  170. }
  171. System.out.println(address);
  172. if (man.isSelected()) {
  173. System.out.println("男");
  174. this.sex="男";
  175. }
  176. if (women.isSelected()) {
  177. System.out.println("女");
  178. this.sex="女";
  179. }
  180. System.out.println(hobbystring);
  181. Area.setText(null);
  182. Area.setText("姓名:"+name+" 地址:"+address+" 性别:"+sex+" 爱好:"+hobbystring);
  183. }
  184.  
  185. private void Reset() {
  186. fieldadress.setText(null);
  187. fieldname.setText(null);
  188. sing.setSelected(false);
  189. dance.setSelected(false);
  190. draw.setSelected(false);
  191. bg.clearSelection();
  192. Area.setText(null);
  193. }
  194. }

三、运行结果:

初始界面

运行结果:

点击重置后:

结对编程对象:胡欢欢

实验总结:

布局管理器

1.为了设计美观合理的GUI界面,需要考虑组件在容器组件中的位置和相互关系,就需要学习布局设计的知识。

2.在java的GUI应用程序界面设计中,布局控制通过为容器设置布局管理器来实现的

5种布局管理器

(1)FlowLayout: 流布局(Applet和Panel的默认布局管理器)

(2)BorderLayout:边框布局( Window、Frame和Dialog的默认布局管理器)

(3)GridLayout: 网格布局

1.Swing和MVC设计模式

a.设计模式(Design pattern)是设计者一种流行的思考设计问题的方法,是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

b.每一个模式描述了一个不断重复发生的设计问题,以及该问题的核心解决方案

c.模型-视图-控制器设计模式(Model –ViewController )是Java EE平台下创建 Web 应用程序的重要设计模式。

MVC设计模式

– Model(模型):是程序中用于处理程序数据逻辑的部分,通常模型负责在数据库中存取数据。

– View(视图):是程序中处理数据显示的部分,通常视图依据模型存取的数据创建。

– Controller(控制器):是程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

感受:本周学习时间较为紧张,而且编程练习较难,但是收获很大,通过本次编程练习发现了自己对于布局管理器的一些知识漏洞,得到了更大的进步。

201871010114-李岩松《面向对象程序设计(java)》第十四周学习总结的更多相关文章

  1. 201521123061 《Java程序设计》第十四周学习总结

    201521123061 <Java程序设计>第十四周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据 ...

  2. 201521123072《java程序设计》第十四周学习总结

    201521123072<java程序设计>第十四周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库 ...

  3. 201521123038 《Java程序设计》 第十四周学习总结

    201521123038 <Java程序设计> 第十四周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 接口: DriverManager ...

  4. 201521123122 《java程序设计》第十四周学习总结

    ## 201521123122 <java程序设计>第十四周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. M ...

  5. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  6. 201777010217-金云馨《面向对象程序设计Java》第四周总结学习

    2019面向对象程序设计(Java)第4周学习指导及要求 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ ...

  7. 汪慧和201771010123《面向对象程序设计JAVA》第四周实验总结

    第一部分:理论知识学习部分 1.类 类(class)是具有相同属性和行为的一组对象的集合,是构造程序的基本单元,是构造对象的模板或蓝图. 2.对象 对象:即数据,对象有三个特性——1.行为 2.状态 ...

  8. 201871010132-张潇潇《面向对象程序设计(java)》第一周学习总结

    面向对象程序设计(Java) 博文正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...

  9. 扎西平措 201571030332《面向对象程序设计 Java 》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...

  10. 201621123040《Java程序设计》第十四周学习总结

    1.本周学习总结 1.1以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 显示所有数据库: show databases; 创建数据库: create database test; 删除数据 ...

随机推荐

  1. EntityFramework中实体类到表名的批量映射

    在使用EntityFramework做CodeFirst开发时,经常需要将实体类映射到数据库表,但是C#实体类和数据库表中的命名遵循的是不同的规范,这就需要为每个实体类做一个到数据库表名的映射.大多情 ...

  2. springboot整合web开发(整合servlet、filter、listener、访问静态、文件上传)

    整合servlet 1.继承HttpServlet 2.添加@WebServlet注解 @WebServlet(name="FirstServlet",urlPatterns=&q ...

  3. 如何修改PhpStorm快捷键

  4. axios解决跨域问题(vue-cli3.0)

    一.什么是跨域 1.跨域 指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 2.同源策略 是指协议,域名,端口都要相同,其中有一个不同都 ...

  5. 搭建mount+nfs远程挂载

    需求背景: 192.168.10.100 源服务器 目录:/root/test 目录属主属组普通用户,权限777 192.168.10.111 目标服务器 目录:/root/test111 目录属主属 ...

  6. English:Root "tele"

    Xx_Introduction tele mean "far" mean"faar" cognate word have tele\culture\tel\pa ...

  7. Dockerfile优化

    总结: 1.编写.dockerignore文件 2.容器只运行单个应用 3.将多个RUN指令合并为一个 4.基础镜像的标签不要用latest 5.每个RUN指令后删除多余文件 6.选择合适的基础镜像( ...

  8. 分组排序函数——row_number()

    1.MySQL8.0以上版本 用法1:无分组排序 Row_number() OVER(ORDER BY 字段 DESC)例如:Row_number() OVER(ORDER BY 学生成绩 DESC) ...

  9. Java的BIO和NIO很难懂?用代码实践给你看,再不懂我转行!

    本文原题“从实践角度重新理解BIO和NIO”,原文由Object分享,为了更好的内容表现力,收录时有改动. 1.引言 这段时间自己在看一些Java中BIO和NIO之类的东西,也看了很多博客,发现各种关 ...

  10. PHP ThinkPHP 非常好用的增删改查方法

    获取列表数据(多条) /*** 获取页面列表* @param $params //查询条件 例:['id'=>['in','1,2']] ['status'=>1]* @param arr ...