编写一个 JFrame 窗口,要求如下:
- 窗口中的 NORTH 区域中放置一个 JPanel 面板
- JPanel 面板中从左到右依次放置如下组件: JLabel 标签,标签的文本为“兴趣” 三个 JCheckBox 多选按钮,文本分别为“羽毛球”、“乒乓球”、“唱歌” JLabel 标签,标签的文本为“性别” 两个 JRadioButton 按钮,文本分别为“男”、“女”
- 窗口的 CENTER 区域放置一个 JScrollPane 容器,容器中放置一个 JTextArea 文本域
- 当点击多选按钮和单选按钮时,会把选中按钮的文本显示在 JTextArea 文本域中。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class Information extends JFrame { // 窗口NORTH部的JPanel面板
private JPanel panel = new JPanel();
private JLabel lb1 = new JLabel("爱好"); // 爱好标签
private JCheckBox cb1 = new JCheckBox("羽毛球"); // 三个表示爱好的JCheckBox复选框
private JCheckBox cb2 = new JCheckBox("乒乓球");
private JCheckBox cb3 = new JCheckBox("唱歌");
private JLabel lb2 = new JLabel("性别"); // 性别标签
private JRadioButton rb1 = new JRadioButton("男"); // 表示性别的JRadioButton单选框
private JRadioButton rb2 = new JRadioButton("女");
private ButtonGroup bg = new ButtonGroup(); // ButtonGroup添加JRadioButton,实现单选功能
private JTextArea area = new JTextArea(); // 文本域组件
private JScrollPane pane = new JScrollPane(area); // 窗口CENTER部的JScrollPane面板,其中放置area文本域
private Set<String> hobbies = new HashSet<String>(); // Set集合存放选中的兴趣
private String gender = ""; // gender选中的性别
private ActionListener listener1 = new ActionListener() { // JCheckBox复选框的事件监听器
public void actionPerformed(ActionEvent e) {
JCheckBox cb = (JCheckBox) e.getSource();
if (cb.isSelected()) { // 选中的复选框把文本添加到Set集合中
hobbies.add(cb.getText());
} else {
hobbies.remove(cb.getText()); // 反之从集合中移除
}
print();
}
};
private ActionListener listener2 = new ActionListener() { // JRadioButton单选框的事件监听器
public void actionPerformed(ActionEvent e) {
JRadioButton jb = (JRadioButton) e.getSource();
gender = jb.getText();
print();
}
};
public Information() { // 打印方法
//添加标签、单选和复选按钮
panel.add(lb1);
panel.add(cb1);
panel.add(cb2);
panel.add(cb3);
panel.add(lb2);
panel.add(rb1);
panel.add(rb2);
bg.add(rb1);
bg.add(rb2);
cb1.addActionListener(listener1); // 为单选和复选按钮添加事件监听器
cb2.addActionListener(listener1);
cb3.addActionListener(listener1);
rb1.addActionListener(listener2);
rb2.addActionListener(listener2);
// 将JPanel面板和JScrollPane面板添加到JFrame容器中
Container container = this.getContentPane();
container.add(panel, BorderLayout.NORTH);
container.add(pane, BorderLayout.CENTER);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
private void print() {
area.setText(""); // 清空文本域
if (hobbies.size() > 0) { // 如果Set集合中有元素,打印兴趣
area.append("你的兴趣爱好有: ");
}
Iterator<String> it = hobbies.iterator();
while (it.hasNext()) {
area.append(it.next() + " ");
}
if (!"".equals(gender)) { // 如果gender不为空字符串,打印性别
area.append("你的性别为: " + gender);
}
}
public static void main(String[] args) {
new Information();
}
}