题目
编写一个JFrame窗口,要求如下:
- 在窗口的NORTH区放置一个JPanel面板。
- JPanel面板放置如下组件:
(1) JLable标签,标签文本为“兴趣”,右边接着是三个JCheckBox多选按钮,选项分别是“羽毛球”、“乒乓球”、“唱歌”。可以多选。
(2) JLabel标签,标签文本为“性别”,右边接着是两个JRadioButton按钮,选项分别是“男”、“女”。置成单选按钮,提示:使用ButtonGroup类 。
(3) 兴趣标签及按钮放在第一行,性别标签 及按钮放在第二行,分别借助两个行型Box容器安排这两行组件的位置,而两个行型Box容器放入JPanel面板中,要两行组件对齐的话,可以把JPanel面板设置两行一列的GridLayout布局。 - 窗口的CENTER区域放置一个JScrollPane容器,容器中放置一个JTextArea文本域。
- 当点击JCheckBox多选按钮和JRadioButton按钮时,如果是选中操作,则把选中项的文本显示在JTextArea文本域,每行显示一个选项。可以重复点击,每次点击都显示选中项。
TestMain类
package cn.ganggang;
public class TestMain {
public static void main(String[] args) {
new MyFrame("窗口");
}
}
MyWindows类
package cn.ganggang; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * 继承JFrame类 * * @author Dustray 2017年11月17日 */ public class MyFrame extends JFrame { private JCheckBox jCheckBox1, jCheckBox2, jCheckBox3; private JRadioButton jRadioButton1, jRadioButton2; private JTextArea ta; public MyFrame(String title) { // 初始化组件 init(); // 设置内部容器和组件 setJPanel(); // 设置窗口位置大小 setBounds(450, 150, 500, 500); // 设置窗口标题 setTitle(title); // 设置可见 setVisible(true); // 设置窗口按钮 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } public void setJPanel() { // 设置最外层面板为纵向BoxLayout Container containerMain = getContentPane(); containerMain.setLayout(new BoxLayout(containerMain, BoxLayout.Y_AXIS)); // 设置两个面板为横向BoxLayout JPanel containerBox1 = new JPanel(); JPanel containerBox2 = new JPanel(); containerBox1.setLayout(new BoxLayout(containerBox1, BoxLayout.X_AXIS)); containerBox2.setLayout(new BoxLayout(containerBox2, BoxLayout.X_AXIS)); // 设置两个面板为GridLayout:单行四列 JPanel containerLikeGrid = new JPanel(); JPanel containerSexGrid = new JPanel(); containerLikeGrid.setLayout(new GridLayout(1, 4)); containerSexGrid.setLayout(new GridLayout(1, 4)); // 设置第一个GridLayout内容,从左至右分别为:“兴趣”、“羽毛球”、“乒乓球”、“唱歌”。 containerLikeGrid.add(new JLabel("兴趣")); containerLikeGrid.add(jCheckBox1); containerLikeGrid.add(jCheckBox2); containerLikeGrid.add(jCheckBox3); // 设置两个JRadioButton在同一ButtonGroup中 ButtonGroup group = new ButtonGroup(); group.add(jRadioButton1); group.add(jRadioButton2); // 设置第二个GridLayout内容,从左至右分别为:“性别”、“男”、“女”。 containerSexGrid.add(new JLabel("性别")); containerSexGrid.add(jRadioButton1); containerSexGrid.add(jRadioButton2); // 将两个GridLayout分别放入两个BoxLayout containerBox1.add(containerLikeGrid); containerBox2.add(containerSexGrid); // 将两个横向BoxLayout放入纵向主BoxLayout containerMain.add(containerBox1); containerMain.add(containerBox2); // 创建JScrollPane()面板对象,并将文本域对象添加到面板中 JScrollPane jScrollPane = new JScrollPane(ta); // 将JScrollPane放入纵向主BoxLayout containerMain.add(jScrollPane); } /** * 组件初始化,设置监听事件 */ private void init() { jCheckBox1 = new JCheckBox("羽毛球"); jCheckBox2 = new JCheckBox("乒乓球"); jCheckBox3 = new JCheckBox("唱歌"); // 为三个JCheckBox添加监听 jCheckBox1.addActionListener(new CheckBoxListener()); jCheckBox2.addActionListener(new CheckBoxListener()); jCheckBox3.addActionListener(new CheckBoxListener()); jRadioButton1 = new JRadioButton("男"); jRadioButton2 = new JRadioButton("女"); // 为三个JRadioButton添加监听 jRadioButton1.addActionListener(new CheckBoxListener()); jRadioButton2.addActionListener(new CheckBoxListener()); // 创建文本区域组件 ta = new JTextArea(20, 50); } /** * 监听内部类,实现ActionListener * * @author Dustray 2017年11月17日 */ class CheckBoxListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // 清空文本框 ta.setText(""); // 审查单/复选框状态 checkButton(); } public void checkButton() { if (jCheckBox1.isSelected()) { ta.setText(ta.getText() + jCheckBox1.getText() + "\n"); } if (jCheckBox2.isSelected()) { ta.setText(ta.getText() + jCheckBox2.getText() + "\n"); } if (jCheckBox3.isSelected()) { ta.setText(ta.getText() + jCheckBox3.getText() + "\n"); } if (jRadioButton1.isSelected()) { ta.setText(ta.getText() + jRadioButton1.getText() + "\n"); } if (jRadioButton2.isSelected()) { ta.setText(ta.getText() + jRadioButton2.getText() + "\n"); } } } }