博文正文开头格式:(2分)

项目

内容

这个作业属于哪个课程

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。

随笔博文正文内容包括:

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

1.布局管理器

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

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

  按钮放置在一个JPanel对象中,组件放在容器中,布局管理器决定容器中的组件具体放置的位置和大小;

  边框布局会扩展所有·边框布局管理器是每个JFrame内容窗格的默认布局管理器;边框组件的厚度不会随窗口大小改变而改变;

  网格布局:每个单元大小都是一样的,缩放窗口,计算器按钮随之变大或变小,但所有按钮尺寸保持一致;

  构造器:panel.steLayout(new GridLayout(5,4)); ;void pack() 缩放窗口

5种布局管理器

(1)FlowLayout: 流布局(Applet和Panel的默认布局管理器):从左到右,从上到下逐行摆放。

(2)BorderLayout:边框布局( Window、Frame和Dialog的默认布局管理器):分上下左右中五个方位

(3)GridLayout: 网格布局

(4)GridBagLayout: 网格组布局:容许组件扩展到多行、多列。

(5)CardLayout :卡片布局:把组件象一系列卡片一样叠放,一个时刻只能看到最上面的。

通过setLayout( )方法为容器设置新的布局。格式 :容器组件名.setLayout( 布局类对象名)。

a.FlowLayout (流布局管理器)

– FlowLayout( ):生成一个默认的流式布局对象

– FlowLayout(int align): 设定每一行组件的对齐方式(FlowLayout.LEFT, FlowLayout.CENTER, FlowLayout.RIGHT)

– FlowLayout(int align,int hgap,int vgap):可以设定组件间的水平和垂直距离(缺省时组件之间没有空隙)

b.边框布局管理器是每个JFrame的内容窗格的默认布局管理器

  向容器中加入组件时,若使用两个参数的add()方法,第二个参数必须说明加入组件在容器中的放置位置;

  位置参数是BorderLayout 类的常量:CENTER、NORTH、SOUTH、EAST、 WEST.

c.网格布局按行列排列所有的组件;在网格布局对象的构造器中,需要指定行数和列数:panel.setLayout(new GridLayout(6,10));

  放置组件的每个单元具有相同的尺寸。
  添加组件,从第一行和第一列开始,然后是第一行的第二列。以此类推
d.
GridLayout的构造函数如下:

(1)GridLayout():生成一个单行单列的网格布局
(2)GridLayout(int rows,int cols):生成一个设定行数和列数的网格布局
(3)GridLayout(int rows,int columns,int hgap,int vgap):可以设置组件之间的水平和垂直间隔。

布局管理器应用总结:

  FlowLayout是 Applet 和面板的缺省布局管理器。组件从左上角到右下角进行排列。

  BorderLayout 按北、南、东、西、中的不同区域划分将组件排列于容器中。

  GridLayout 将组件按行和列排列。所有组件大小相同。
  GridBagLayout 能将组件放置在最精确的位置。各组件的大小可以不同

2.文本域(JTextField) : 用于获取单行文本输入。
   用于文本输入的组件继承于JTextComponent抽象类

  文本域和文本区组件用于获取文本输入;

(1)文本域(JTextField)只能进行单行文本输入;

(2)文本区(JTextArea)能进行多行文本输入;

(3)JPassword也只能单行文本输入,但不会显示内容;

  三个类均继承于抽象类JTextComponent类,子类获取(get)、设置(set)文本的方法由超类JTextComponent提供;

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

3.文本域

  把文本域添加到窗口:将文本域添加到面板或其他容器中, ·任意时候可以构造文本域使用setText方法,从JTextComponent中继承;

4.标签

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

  可以用标签标识组件:构造一个JLabel组件将;

  JLabel的构造器允许指定初始文本和图标,也可以选择内容的排列方式;可以用SwingConstants接口中的常量来指定排列方式;

5、标签的常用用途之一就是标识组件.

6.密码域:

  密码域是一种特殊类型的文本域。每个输入的字符都用回显字符实现,典型的回显字符是 *。

7.滚动窗格

  将文本区插入到滚动窗格中 textArea=new JTextArea(8,40); JScrollPane scrollPane=new JScrollPane(textArea);  如果文本超过文本区,则滚动条将会自动的出现;

  Swing中文本区没有滚动条,若需要滚动条。将文本区放入一个滚动窗格中即可.

8.复选框:指定文本标签:bold = new JCheckBox("Bold");选定或取消复选框:bold.setSelected(true);;方法isSelected返回每个复选框的状态;

  复选框构造器

1.bold = new JCheckBox("Bold");复选框自动地带有表示标签。

2. JCheckBox(String label,Icon icon);构造带有标签与图标的复选框,默认初始未被选择。

3.JCheckBox(String label,boolean state);用指定的标签和初始化选

9:为单选按钮组构建一个ButtonGroup的对象,将JRadioButton类对象添加到按钮中,在新按钮被按下时,取消前一个被按下的按钮;

  单选按钮的构造器:
1.JRadioButton(String label,Icon icon);创建一个带标签和图标的单选按钮
2.JRadioButton(String label,boolean state);用指定的标签和初始化状态构造单选按钮

组合框:

  文本域和预定的选项组合起来;JCmboBox类提供了组合框的组件;setEditable方法可让组合框成为可编辑状态;getselectedItem方法获取当前的选项或被编辑的文本;方法addItem增加选项;
10.菜单

  菜单是GUI编程中经常用到的一种组件。位于窗口顶部的菜单栏(menu bar)中包括下拉菜单的名字。点击一个名字就可以打开包含菜单项(menuitems)和子菜单(submenus)的菜单.

11.单选按钮菜单项与普通单选按钮的工作方式一样,必须将它们加入的按钮组中。当按钮组中的一个按钮被选中时,其它按钮就自动变为选择项。

12.弹出菜单:创建一个弹出菜单与创建一个常规菜单的方法类似 ,但是弹出菜单没有标题。

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

第二部分:实验部分

实验1:测试程序1(5分)

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

掌握布局管理器的用法;

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

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

实验代码如下:

package calculator;
import java.awt.*;
import javax.swing.*; /**
* @version 1.35 2018-04-10
* @author Cay Horstmann
*/
public class Calculator
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> { //lambda表达式
CalculatorFrame frame = new CalculatorFrame(); //创建一个CalculatorFrame类对象
frame.setTitle("Calculator"); //调用setTitle方法设置框架标题
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //调用setDefaultCloseOperation方法设置取消按钮
frame.setVisible(true);//调用setVisible方法设置组件可见。
});
}
}

  

package calculator;
import javax.swing.*; /**
* A frame with a calculator panel.
*/
public class CalculatorFrame extends JFrame //CalculatorFrame类继承JFrame类
{
public CalculatorFrame() //CalculatorFrame构造器
{
add(new CalculatorPanel()); //add方法添加新建的CalculatorPanel类对象
pack();//调整窗口的大小,考虑到其组件的首先大小
}
}

  

package calculator;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* A panel with calculator buttons and a result display.
*/
public class CalculatorPanel extends JPanel //CalculatorPanel类继承JPanel类
{
private JButton display; //私有成员域的定义
private JPanel panel;
private double result;
private String lastCommand;
private boolean start; public CalculatorPanel() //CalculatorPanel构造器
{
setLayout(new BorderLayout()); //setLayout方法为容器设置布局管理器,将布局管理器类对象设置为边框布局管理器 result = 0; //初始化私有成员域的变量
lastCommand = "=";
start = true; // add the display display = new JButton("0"); //创建一个 JButton类对象
display.setEnabled(false); //调用setEnabled方法,值为false,说明按钮不可选择,
add(display, BorderLayout.NORTH);
//调用add方法,向display容器中加入组件,BorderLayout.NORTH说明了组件添加在容器中的位置,NORTH
InsertAction insert = new InsertAction(); //创建一个InsertAction类对象insert
CommandAction command = new CommandAction(); //创建一个CommandAction类对象command // add the buttons in a 4 x 4 grid panel = new JPanel();
panel.setLayout(new GridLayout(4, 4)); //调用setLayout方法设置面板的布局管理器为4行4 列的网格布局管理器 addButton("7", insert); //调用addButton方法将带有7的标签插入
addButton("8", insert);
addButton("9", insert);
addButton("/", command); addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command); addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command); addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command); add(panel, BorderLayout.CENTER);
//调用add方法,向panel容器中加入组件,BorderLayout.center说明了组件添加在容器中的位置居中center,其他位置被挤掉
} /**
* Adds a button to the center panel.
* @param label the button label
* @param listener the button listener
*/
private void addButton(String label, ActionListener listener)
//addButton方法,入口参数为label以及ActionListener动作监听器对象listener
{
JButton button = new JButton(label); //创建一个JButton类对象,参数为标签值的标签
button.addActionListener(listener); //调用addActionListener方法
panel.add(button); //向面板当中添加这个按钮
} /**
* This action inserts the button action string to the end of the display text.
*/
private class InsertAction implements ActionListener //InsertAction类是实现ActionListener接口的类
//不执行运算功能
{
public void actionPerformed(ActionEvent event) //actionPerformed方法,ActionEvent event事件对象的入口参数
{
String input = event.getActionCommand(); //调用getActionCommand方法
if (start)
{
display.setText("");//调用setText方法设置文本组件中的文本
start = false; //不计算
}
display.setText(display.getText() + input);//调用getText方法获取文本组件的文本
}
} /**
* This action executes the command that the button action string denotes.
*/
private class CommandAction implements ActionListener //CommandAction类是实现ActionListener接口的类
//执行运算功能
{
public void actionPerformed(ActionEvent event)
{
String command = event.getActionCommand(); if (start) //开始
{
if (command.equals("-")) //开始命令为“-”时,
{
display.setText(command); //setText方法设置文本组件中的文本为command命令值,即“-”号
start = false; //不运行
}
else lastCommand = command;
}
else
{
calculate(Double.parseDouble(display.getText()));//调用parseDouble方法将获取的文本组件的文本为数字,把字符串转换成数字
lastCommand = command;
start = true;
}
}
} /**
* Carries out the pending calculation.
* @param x the value to be accumulated with the prior result.
*/
public void calculate(double x) //calculate方法
{
if (lastCommand.equals("+")) result += x; //加法运算
else if (lastCommand.equals("-")) result -= x; //减法运算
else if (lastCommand.equals("*")) result *= x; //乘法运算
else if (lastCommand.equals("/")) result /= x; //除法运算
else if (lastCommand.equals("=")) result = x; //等于
display.setText("" + result);
}
}

  运行结果如下:

                        

上述运行结果计算了 7 + 99 = 106 这个式子;

实验1:测试程序2(5分)

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

掌握文本组件的用法;

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

实验代码如下:

package text;
import java.awt.*;
import javax.swing.*; /**
* @version 1.42 2018-04-10
* @author Cay Horstmann
*/
public class TextComponentTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> { //lambda表达式
TextComponentFrame frame = new TextComponentFrame(); //创建一个TextComponentFrame类对象
frame.setTitle("TextComponentTest"); //框架标题
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭操作
frame.setVisible(true);//组件可见
});
}
}

  

package text;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants; /**
* A frame with sample text components.
*/
public class TextComponentFrame extends JFrame
{
public static final int TEXTAREA_ROWS = 8; //常量的定义,8行20列
public static final int TEXTAREA_COLUMNS = 20; public TextComponentFrame() //TextComponentFrame构造器
{
JTextField textField = new JTextField(); //创建JTextField文本域类对象对象
JPasswordField passwordField = new JPasswordField(); //创建JPasswordField密码域类对象 JPanel northPanel = new JPanel(); //创建一个JPanel类对象
northPanel.setLayout(new GridLayout(2, 2)); //调用setLayout方法设置面板的布局为2行2列的网格布局管理器
northPanel.add(new JLabel("User name: ", SwingConstants.RIGHT));
//新建一个JLabel标签User name,在最右边,调用add方法添加到northPanel上
northPanel.add(textField); //调用add方法添加文本域
northPanel.add(new JLabel("Password: ", SwingConstants.RIGHT));
//新建一个JLabel标签Password,在最右边,调用add方法添加到northPanel上
northPanel.add(passwordField); //添加密码域文本 add(northPanel, BorderLayout.NORTH);//添加northPanel面板到边框布局管理器的north位置 JTextArea textArea = new JTextArea(TEXTAREA_ROWS, TEXTAREA_COLUMNS);
//创建一个新的TEXTAREA_ROWS行, TEXTAREA_COLUMNS列文本域
JScrollPane scrollPane = new JScrollPane(textArea);
//创建一个滚动条类对象
add(scrollPane, BorderLayout.CENTER);
//添加到布局管理器居中的位置
// add button to append text into the text area JPanel southPanel = new JPanel(); JButton insertButton = new JButton("Insert");
//创建一个JButton类对象,Insert按钮
southPanel.add(insertButton); //在southPanel上添加insertButton,即将Insert按钮添加到southPanel上
insertButton.addActionListener(event ->
textArea.append("User name: " + textField.getText() + " Password: "
+ new String(passwordField.getPassword()) + "\n"));
//调用addActionListener方法添加动作监听器类对象,append方法将给定的文本追加到文本区中已有文本的尾部
add(southPanel, BorderLayout.SOUTH);//添加southPanel面板到边框布局管理器的SOUTH位置
pack();//调整窗口的大小,考虑组建的首选大小
}
}

  运行结果如下:

实验1:测试程序3(5分)

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

掌握复选框组件的用法;

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

实验代码如下:

package checkBox;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* A frame with a sample text label and check boxes for selecting font
* attributes.
*/
public class CheckBoxFrame extends JFrame
{
private JLabel label; //私有属性的定义,一个面板,两个复选框,
private JCheckBox bold;
private JCheckBox italic;
private static final int FONTSIZE = 24; //常量的 public CheckBoxFrame() //CheckBoxFrame构造器
{
// add the sample text label label = new JLabel("The quick brown fox jumps over the lazy dog.");
//新建一个JLabel对象,The quick brown fox jumps over the lazy dog.标签
label.setFont(new Font("Serif", Font.BOLD, FONTSIZE));
//调用setFont方法
add(label, BorderLayout.CENTER);//将label添加到边框布局管理器的中间位置 // this listener sets the font attribute of
// the label to the check box state ActionListener listener = event -> {
int mode = 0;
if (bold.isSelected()) mode += Font.BOLD;
//如果bold是可选择的,字体会加粗
if (italic.isSelected()) mode += Font.ITALIC;
//如果italic是可选择的,字体会边倾斜
label.setFont(new Font("Serif", mode, FONTSIZE));//设置字体,衬线以及字体的大小
}; // add the check boxes
//添加到复选框
JPanel buttonPanel = new JPanel(); bold = new JCheckBox("Bold"); //创建一个JCheckBox对象,
bold.addActionListener(listener);//添加事件监听器对象
bold.setSelected(true);//调用setSelected方法表示可选择
buttonPanel.add(bold); //将bold添加到buttonPanel上 italic = new JCheckBox("Italic");
italic.addActionListener(listener);
buttonPanel.add(italic); add(buttonPanel, BorderLayout.SOUTH); //将buttonPanel添加到边框布局管理器的SOUTH位置
pack();//调整窗口的大小,考虑组件的首选大小
}
}

  

package checkBox;

import java.awt.*;
import javax.swing.*; /**
* @version 1.35 2018-04-10
* @author Cay Horstmann
*/
public class CheckBoxTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> { //lambda表达式
CheckBoxFrame frame = new CheckBoxFrame(); //创建一个CheckBoxFrame类对象
frame.setTitle("CheckBoxTest"); //设置框架的标题为CheckBoxTest
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//调用setDefaultCloseOperation方法设置窗口是否可见
frame.setVisible(true);//调用setVisible方法设置组件是否可见
});
}
}

  运行结果如下:

实验总结:

在选中不同的复选框Bold和italic时,The quick brown fox jumps over the lazy dog.这句话的字体会发生相应的变化,如果选中Bold这个框时,它的字体是不倾斜的,但是去掉后,选了italic之后,它的字体会变得倾斜,同时选中之后,会加粗并且倾斜。

实验1:测试程序4(5分)

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

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

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

实验代码如下:

package radioButton;

import java.awt.*;
import javax.swing.*; /**
* @version 1.35 2018-04-10
* @author Cay Horstmann
*/
public class RadioButtonTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> { //lambda表达式
RadioButtonFrame frame = new RadioButtonFrame(); //创建一个RadioButtonFrame(单选按钮框架)对象
frame.setTitle("RadioButtonTest"); //调用setTitle方法设置框架的标题为RadioButtonTest
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //调用setDefaultCloseOperation方法设置窗口是否可见
frame.setVisible(true); //调用setVisible方法设置组件是否可见
});
}
}

  

package radioButton;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* A frame with a sample text label and radio buttons for selecting font sizes.
*/
public class RadioButtonFrame extends JFrame
{
private JPanel buttonPanel; //私有属性的定义
private ButtonGroup group;
private JLabel label;
private static final int DEFAULT_SIZE = 36; //常量的定义 public RadioButtonFrame() //RadioButtonFrame构造器
{
// add the sample text label label = new JLabel("The quick brown fox jumps over the lazy dog.");
//创建一个带有“The quick brown fox jumps over the lazy dog.”字符串的JLabel对象
label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE));//调用setFont方法设置字体的状态,字形大小,默认
add(label, BorderLayout.CENTER);
//将面板添加到边框布局管理器的居中位置
// add the radio buttons buttonPanel = new JPanel();
group = new ButtonGroup(); addRadioButton("Small", 8); //调用addRadioButton方法将带有"Small"字符串标签添加到单选按钮组当中,字体设置为8号
addRadioButton("Medium", 12); //调用addRadioButton方法将带有"Medium"字符串标签添加到单选按钮组当中,字体设置为12号
addRadioButton("Large", 18); //调用addRadioButton方法将带有"Large"字符串标签添加到单选按钮组当中,字体设置为18号
addRadioButton("Extra large", 36); //调用addRadioButton方法将带有"Extra large"字符串标签添加到单选按钮组当中,字体设置为36号 add(buttonPanel, BorderLayout.SOUTH);//将buttonPanel添加到边框布局管理器的SOUTH位置
pack(); //调整窗口的大小,考虑组件的首选大小
} /**
* Adds a radio button that sets the font size of the sample text.
* @param name the string to appear on the button
* @param size the font size that this button sets
*/
public void addRadioButton(String name, int size) //addRadioButton方法
{
boolean selected = size == DEFAULT_SIZE; //将是否可选择,以及字形大小设置为默认状态
JRadioButton button = new JRadioButton(name, selected);
group.add(button); //添加按钮
buttonPanel.add(button); //将按钮添加到面板 // this listener sets the label font size ActionListener listener = event -> label.setFont(new Font("Serif", Font.PLAIN, size));
//动作监听器对象,调用setFont方法设置字体的字形大小
button.addActionListener(listener);
} //将动作监听器对象添加到按钮
}

  运行结果如下:

实验1:测试程序5(5分)

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

掌握边框的用法;

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

实验代码如下:

package border;

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*; /**
* A frame with radio buttons to pick a border style.
*/
public class BorderFrame extends JFrame {
private JPanel demoPanel; // 私有属性的定义
private JPanel buttonPanel;
private ButtonGroup group; public BorderFrame() // BorderFrame构造器
{
demoPanel = new JPanel(); // 创建两个JPanel对象
buttonPanel = new JPanel();
group = new ButtonGroup(); addRadioButton("Lowered bevel", BorderFactory.createLoweredBevelBorder());
//添加单选按钮到
addRadioButton("Raised bevel", BorderFactory.createRaisedBevelBorder());
addRadioButton("Etched", BorderFactory.createEtchedBorder());
addRadioButton("Line", BorderFactory.createLineBorder(Color.BLUE));
addRadioButton("Matte", BorderFactory.createMatteBorder(10, 10, 10, 10, Color.BLUE));
addRadioButton("Empty", BorderFactory.createEmptyBorder()); //将带有标题的蚀刻边框添加到一个面板上
Border etched = BorderFactory.createEtchedBorder();
Border titled = BorderFactory.createTitledBorder(etched, "Border types");
buttonPanel.setBorder(titled); //调用setBorder方法设置标题字符串的边框 setLayout(new GridLayout(2, 1)); //设置布局管理器为2行1列的网格布局
add(buttonPanel); //添加按面板buttonPanel
add(demoPanel); //添加面板demoPanel
pack(); //调整窗口的大小,考虑组件首选大小
} public void addRadioButton(String buttonName, Border b) // addRadioButton方法来添加单选按钮
{
JRadioButton button = new JRadioButton(buttonName); // 创建一个JRadioButton对象
button.addActionListener(event -> demoPanel.setBorder(b));
// addActionListener动作监听器,调用setBorder方法来设置这个组件的边框
group.add(button); //将按钮添加到按钮组当中
buttonPanel.add(button); //在添加到面板当中
}
}

  

package border;

import java.awt.*;
import javax.swing.*; /**
* @version 1.35 2018-04-10
* @author Cay Horstmann
*/
public class BorderTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> { //lambda表达式
BorderFrame frame = new BorderFrame(); //创建一个BorderFrame对象
frame.setTitle("BorderTest"); //调用setTitle方法设置框架的标题为BorderTest
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //调用setDefaultCloseOperation方法设置窗口是否可见
frame.setVisible(true); //调用setVisible方法设置组件是否可见
});
}
}

  运行结果如下:

            

    

    

实验1:测试程序6(5分)

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

掌握组合框组件的用法;

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

实验代码如下:

package comboBox;

import java.awt.*;
import javax.swing.*; /**
* @version 1.36 2018-04-10
* @author Cay Horstmann
*/
public class ComboBoxTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> { //lambda表达式
ComboBoxFrame frame = new ComboBoxFrame();
frame.setTitle("ComboBoxTest"); //调用setTitle方法设置框架的标题为ComboBoxTest
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //调用setDefaultCloseOperation方法设置窗口是否可见
frame.setVisible(true); //调用setVisible方法设置组件是否可见
});
}
}

  

package comboBox;

import java.awt.BorderLayout;
import java.awt.Font; import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; /**
* A frame with a sample text label and a combo box for selecting font faces.
*/
public class ComboBoxFrame extends JFrame
{
private JComboBox<String> faceCombo; //JComboBox<String>是泛型类,包含String类型的对象
private JLabel label;
private static final int DEFAULT_SIZE = 24; //常量的定义 public ComboBoxFrame() //ComboBoxFrame构造器
{
// add the sample text label label = new JLabel("The quick brown fox jumps over the lazy dog.");
//创建一个JLabel对象,标签内容为The quick brown fox jumps over the lazy dog.
label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE));
//调用setFont方法设置标题的字体,字形大小为默认
add(label, BorderLayout.CENTER);
//将label添加到边框布局管理器的居中位置
// make a combo box and add face names faceCombo = new JComboBox<>(); //新建一个JComboBox<>类对象
faceCombo.addItem("Serif"); //把一个选项添加到选项列表中
faceCombo.addItem("SansSerif");
faceCombo.addItem("Monospaced");
faceCombo.addItem("Dialog");
faceCombo.addItem("DialogInput"); // the combo box listener changes the label font to the selected face name
//组合框的监听器改变面板字体
faceCombo.addActionListener(event ->
label.setFont(
new Font(faceCombo.getItemAt(faceCombo.getSelectedIndex()),
Font.PLAIN, DEFAULT_SIZE))); //调用getSelectedIndexd方法获得当前的选项,不是可编辑的 // add combo box to a panel at the frame's southern border JPanel comboPanel = new JPanel();
comboPanel.add(faceCombo); //添加组合框到面板
add(comboPanel, BorderLayout.SOUTH); //将面板添加到边框布局管理器的SOUTH位置
pack(); //调整窗口的大小,考虑组件的首选大小
}
}

  运行结果如下:

        

            

实验2:结对编程练习包含以下4部分:(30分)

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

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

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

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

      

1)   程序设计思路简述;

2)   符合编程规范的程序代码;

3)   程序运行功能界面截图;

4)   结对过程描述,提供两人在讨论、细化和编程时的结对照片(非摆拍)。

实验代码如下:

package zmo;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class demo extends JFrame {
public demo() {
JPanel panel1 = new JPanel();
panel1.setPreferredSize(new Dimension(700, 45));
panel1.setLayout(new GridLayout(1, 4));
JLabel label1 = new JLabel("姓名:");
JTextField j1 = new JTextField("");
JLabel label2 = new JLabel("选择的条件:");
JComboBox<Object> j2 = new JComboBox<>();
j2.addItem("有好爱");
j2.addItem("无爱好");
panel1.add(label1);
panel1.add(j1);
panel1.add(label2);
panel1.add(j2); JPanel panel2 = new JPanel();
panel2.setPreferredSize(new Dimension(700, 50));
panel2.setLayout(new GridLayout(1, 4));
JLabel label3 = new JLabel("地址:");
JTextArea j3 = new JTextArea();
JLabel label4 = new JLabel("爱好:");
JPanel p = new JPanel();
p.setLayout(new GridLayout(3, 1));
p.setBorder(BorderFactory.createLineBorder(null));
JCheckBox c1 = new JCheckBox("阅读");
JCheckBox c2 = new JCheckBox("唱歌");
JCheckBox c3 = new JCheckBox("跳舞");
p.add(c1);
p.add(c2);
p.add(c3);
panel2.add(label3);
panel2.add(j3);
panel2.add(label4);
panel2.add(p); JPanel panel3 = new JPanel();
panel3.setPreferredSize(new Dimension(700, 150));
FlowLayout flowLayout1 = new FlowLayout(FlowLayout.LEFT, 20, 40);
panel3.setLayout(flowLayout1);
JLabel label5 = new JLabel("性别:");
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(2,1));
p1.setBorder(BorderFactory.createLineBorder(null));
ButtonGroup bu = new ButtonGroup();
JRadioButton jr1 = new JRadioButton("男");
JRadioButton jr2 = new JRadioButton("女");
bu.add(jr1);
bu.add(jr2);
p1.add(jr1);
p1.add(jr2);
panel3.add(label5);
panel3.add(p1);
add(panel1);
add(panel2);
add(panel3); JPanel panel4 = new JPanel();
panel4.setPreferredSize(new Dimension(700, 150));
JButton b1 = new JButton("确定");
panel4.add(b1);
JButton b2 = new JButton("重置");
panel4.add(b2);
add(panel4); FlowLayout flowLayout = new FlowLayout();
this.setLayout(flowLayout);
this.setTitle("Students Detail");
this.setBounds(200, 200, 800, 400);
this.setVisible(true);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
String xueli = j2.getSelectedItem().toString();
System.out.println("姓名:" + j1.getText());
System.out.println("选择的条件是:" + xueli);
String hobbystring = "爱好:";
if (c1.isSelected()) {
hobbystring += "阅读";
}
if (c2.isSelected()) {
hobbystring += "唱歌";
}
if (c3.isSelected()) {
hobbystring += "跳舞";
}
System.out.println("地址:" + j3.getText());
if (jr1.isSelected()) {
System.out.println("性别:男");
}
if (jr2.isSelected()) {
System.out.println("性别:女");
}
System.out.println(hobbystring);
}
});
b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
j1.setText(null);
j3.setText(null);
j2.setSelectedIndex(0);
c1.setSelected(false);
c2.setSelected(false);
c3.setSelected(false);
bu.clearSelection();
}
});
} public static void main(String args[]) {
new demo();
} }

  

package zmo;
import java.awt.EventQueue; import javax.swing.JFrame; public class Mian {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
demo page = new demo();
});

  

package zmo;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Window; public class WinCenter {
public static void center(Window win){
Toolkit tkit = Toolkit.getDefaultToolkit();
Dimension sSize = tkit.getScreenSize();
Dimension wSize = win.getSize();
if(wSize.height > sSize.height){
wSize.height = sSize.height;
}
if(wSize.width > sSize.width) {
wSize.width = sSize.width;
}
win.setLocation((sSize.width - wSize.width)/ 2, (sSize.height - wSize.height)/ 2);
}
}

  运行结果如下:

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Window; public class WinCenter {
public static void center(Window win){
Toolkit tkit = Toolkit.getDefaultToolkit();
Dimension sSize = tkit.getScreenSize();
Dimension wSize = win.getSize();
if(wSize.height > sSize.height){
wSize.height = sSize.height;
}
if(wSize.width > sSize.width){
wSize.width = sSize.width;
}
win.setLocation((sSize.width - wSize.width)/ 2, (sSize.height - wSize.height)/ 2);
}
}

  

import java.awt.EventQueue;

import javax.swing.JFrame;

public class Mian
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> {
DemoJFrame page = new DemoJFrame(); page.setTitle("UserGUITest");// 设置标题
page.setSize(800, 400);// 设置窗口大小
page.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭操作
page.setVisible(true);//设置可见性
});
}
}

  

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask; import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class DemoJFrame extends JFrame {
private JPanel jPanel1;
private JPanel jPanel2;
private JPanel jPanel3;
private JPanel jPanel4;
private JTextField fieldname;
private JComboBox comboBox;
private JTextField fieldadress;
private ButtonGroup bg;
private JRadioButton man;
private JRadioButton woman;
private JCheckBox sing;
private JCheckBox dance;
private JCheckBox reading; public DemoJFrame() {
//设置窗口居中
WinCenter.center(this);
jPanel1 = new JPanel();
setJPanel1(jPanel1);
jPanel2 = new JPanel();
setJPanel2(jPanel2);
jPanel3 = new JPanel();
setJPanel3(jPanel3);
jPanel4 = new JPanel();
setJPanel4(jPanel4);
// 设置容器的为流布局
FlowLayout flowLayout = new FlowLayout();
this.setLayout(flowLayout);
// 将四个面板添加到容器中
this.add(jPanel1);
this.add(jPanel2);
this.add(jPanel3);
this.add(jPanel4); } //设置面板1
private void setJPanel1(JPanel jPanel) { // 给面板的布局设置为网格布局 一行4列
jPanel.setLayout(new GridLayout(1,4));
JLabel name = new JLabel("姓名:");
jPanel.setPreferredSize(new Dimension(260, 45));
name.setSize(260, 45);
fieldname = new JTextField("");
fieldname.setSize(80, 20);
jPanel.add(name);
jPanel.add(fieldname); } //地址爱好添加
private void setJPanel2(JPanel jPanel) {
jPanel.setPreferredSize(new Dimension(300, 45));
// 给面板的布局设置为网格布局 一行4列
jPanel.setLayout(new GridLayout(1, 4));
JLabel name = new JLabel("地址:");
fieldadress = new JTextField();
fieldadress.setPreferredSize(new Dimension(300, 45));
//FlowLayout flowLayout = new FlowLayout(FlowLayout.RIGHT);
JLabel study = new JLabel("爱好:");
JPanel selectBox = new JPanel();
selectBox.setBorder(BorderFactory.createTitledBorder(""));
selectBox.setLayout(new GridLayout(3, 1));
sing = new JCheckBox("唱歌");
dance = new JCheckBox("跳舞");
reading = new JCheckBox("阅读");
selectBox.add(sing);
selectBox.add(dance);
selectBox.add(reading);
jPanel.add(name);
jPanel.add(fieldadress);
jPanel.add(study);
jPanel.add(selectBox);
}
//性别按钮的添加
private void setJPanel3(JPanel jPanel) {
jPanel.setPreferredSize(new Dimension(700, 150));
FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT);
jPanel.setLayout(flowLayout);
JLabel sex = new JLabel("性别:");
JPanel selectBox = new JPanel();
selectBox.setBorder(BorderFactory.createTitledBorder(""));
selectBox.setLayout(new GridLayout(2, 1));
bg = new ButtonGroup();
man = new JRadioButton("男");
woman = new JRadioButton("女");
bg.add(man);
bg.add(woman);
selectBox.add(man);
selectBox.add(woman);
jPanel.add(sex);
jPanel.add(selectBox); }
//
private void setJPanel4(JPanel jPanel) {
// TODO 自动生成的方法存根
JTextArea textArea = new JTextArea(3, 20);
JScrollPane scrollPane = new JScrollPane(textArea);
add(scrollPane, BorderLayout.SOUTH);
jPanel.setPreferredSize(new Dimension(700, 150));
FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 50, 10);
jPanel.setLayout(flowLayout);
jPanel.setLayout(flowLayout);
JButton sublite = new JButton("提交");
JButton reset = new JButton("重置");
sublite.addActionListener((e) ->
textArea.append("姓名 " + fieldname.getText() + "\n"+ "地址" + fieldadress.getText() +
"\n"));
reset.addActionListener((e) -> Reset());
jPanel.add(sublite);
jPanel.add(reset);
} //重置方法
private void Reset() {
// TODO 自动生成的方法存根
fieldadress.setText(null);
fieldname.setText(null);
comboBox.setSelectedIndex(0);
sing.setSelected(false);
dance.setSelected(false);
reading.setSelected(false);
bg.clearSelection();
}
}

  运行结果如下:

          

结对照片:

实验总结:(10分)

这周主要学习了事件处理以及Swing用户界面组件,理论知识理解的还可以,在前面的几个验证性的实验中,对代码的理解觉得对这章知识掌握的还可以,但是在结对编程的环节当中,确实存在很大的问题,试了很多次,就是改不到老师要求的那种排版,外观丑陋,而且单选按钮以及复选框的信息我无法显示出来,还有就是那个录入信息输出框不在准确的位置。我会在改的。

201871010119-帖佼佼《面向对象程序设计(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. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

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

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

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

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

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

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

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

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

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

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

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

  10. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

随机推荐

  1. 总结:mysql的各种增删改查!

    (原创总结)分为数据库的增删改查,数据表(和字段)的增删改查,数据的增删改查 三部分!// 创建用户并授权 GRANT SELECT ON bodydb.user TO us@localhost ID ...

  2. JSON——IT技术人员都必须要了解的一种数据交换格式

    JSON作为目前Web主流的数据交换格式,是每个IT技术人员都必须要了解的一种数据交换格式.尤其是在Ajax和REST技术的大行其道的当今,JSON无疑成为了数据交换格式的首选! 今天大家就和猪哥一起 ...

  3. python3 之 文件read方法(read、readline、readlines)

    目录 一.read方法 二.readline方法 三.readlines方法 正文 python3中,读取文件有三种方法:read().readline().readlines(). 此三种方法,均支 ...

  4. 高德JS依赖分析工程及关键原理

    一.背景 高德 App 进行 Bundle 化后,由于业务的复杂性,Bundle 的数量非常多.而这带来了一个新的问题——Bundle 之间的依赖关系错综复杂,需要进行管控,使 Bundle 之间的依 ...

  5. Paramiko的SSH和SFTP使用

    目录 1. 概述 2. Paramiko的基本使用 2.1 SSHClient关键参数介绍 2.2 SSHClient常用示例 2.2.1 通过用户名和密码方式登陆: 2.2.2 通过用户名和密码方式 ...

  6. C语言基础——进制转换 / 数据表示

    第一部分:进制转换 二进制:由0~1构成,逢2进1 八进制:由0~7构成,逢8进1 十六进制:由0~9.A~F构成,逢16进1 两个基本概念 基数:n进制基数为n 123.4 = 1*10^2 + 2 ...

  7. 全网最通俗易懂的Kafka入门!

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在这篇之前已经写过两篇基础文章了,强烈建议先去阅读: ...

  8. 【Android - 进阶】之Drawable简介

    Drawable是什么?Android给我们的解释是:“A general abstraction for 'something that can be drawn'.”,翻译过来就是:对于可以绘制的 ...

  9. jsp html 实现隐藏输入框,点击可以取消隐藏&&弹出输入框

    jsp代码: <script language="javascript" type="text/javascript"> function chg ...

  10. RestTemplate 中文乱码

    @Configuration public class RestTemplateWithoutLoadBalance { @Bean("normalRestTemplate") p ...