在 Swing 中,常见的按钮组件有 JButton、JCheckBox、JradioButton 等,它们都是抽象类 AbstractButton 类的直接或间接子类。在 AbstractButton 类中提供了按钮组件通用的一些方法,如下表所示。

方法描述 功能说明
Icon getIcon()和 void seltIcon(Icon icon) 设置或者获取按钮的图标
String getText()和 void setText(String text) 设置或者获取按钮的文本
void setEnable(boolean b) 启用(当 b 为 true)或禁用(当 b 为 false)按钮
setSelected(boolean b) 设置按钮的状态,当 b 为 true 时,按钮是选中状态,反之为未选中状态
boolean isSelected() 返回按钮的状态(true 为选中,反之为未选中)

前面案例中已经多次用到 JButton 按钮,并且它的使用非常简单,这里就不介绍了。接下来主要围绕 JCheckBox 和 JRadioButton 这两个组件进行详细讲解。

1、JCheckBox


JCheckBox 组件被称为
复选框,它有选中(是)/未选中(非)两种状态,如果用户想接收的输入只有“是”和“非”,则可以通过复选框来切换状态**。如果复选框有多个,则用户可以选其中的一个或多个。下表列举了创建 JCheckBox 对象的常用的构造方法。

方法描述 功能说明
JCheckBox() 创建一个没有文本信息,初始状态未被选中的复选框
JCheckBox(String text) 创建一个带有文本信息,初始状态未被选中的复选框
JCheckBox(String text, boolean selected) 创建一个带有文本信息,并指定初始状态(选中/未选中)的复选框

上表中列出了用于创建 JCheckBox 对象的 3 个构造方法。其中,第一个构造方法没有指定复选框的文本信息及状态,如果想设置文本信息,可以通过调用 JCheckBox 从父类继承的方法来进行设置之。例如调用 setText(String text)来设置复选框文本信息,调用 setSelected(boolean b)方法来设置复选框状态(是否被选中),也可以调用 isSelected()方法来判断复选框是否被选中。第 2 个和第 3 个构造方法都指定了复选框的文本信息,而且第 3 个构造方法还指定了复选框初始化状态是否被选中。

接下来通过一个案例来演示一下 JCheckBox 组件的用法,如下所示。

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.security.spec.ECField;
  4. import javax.swing.*;
  5. public class example19 extends JFrame {
  6. private JCheckBox italic;
  7. private JCheckBox bold;
  8. private JLabel label;
  9. public example19() {
  10. //创建一个 JLabel 标签,标签文本居中对齐
  11. label = new JLabel("我爱你", JLabel.CENTER);
  12. //设置标签文本的字体
  13. label.setFont(new Font("宋体", Font.PLAIN, 20));
  14. this.add(label); //添加标签,默认添加到 CENTER 域
  15. JPanel panel = new JPanel(); //创建一个 JPanel 面板
  16. //创建两个 JCheckBox 复选框
  17. italic = new JCheckBox("ITALIC");
  18. bold = new JCheckBox("BOLD");
  19. //为复选框注册 ActionListener 监听器
  20. public void actionPerformed(ActionEvent e) {
  21. // TODO Auto-generated method stub
  22. int mode = 0;
  23. if (bold.isSelected()) {
  24. mode += Font.BOLD;
  25. }
  26. if (italic.isSelected()) {
  27. mode += Font.ITALIC;
  28. }
  29. label.setFont(new Font("宋体", mode, 20));
  30. }
  31. };
  32. //为两个复选框添加监听器
  33. italic.addActionListener(listener);
  34. bold.addActionListener(listener);
  35. //在 JPanel 面板添加复选框
  36. panel.add(italic);
  37. panel.add(bold);
  38. //在 SOUTH 域添加 JPanel 面板
  39. this.add(panel, BorderLayout.SOUTH);
  40. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  41. this.setSize(400, 300);
  42. this.setVisible(true);
  43. }
  44. public static void main(String[] args) {
  45. new example19();
  46. }
  47. }

运行程序,生成的窗口如下所示。
QQ截图20200624203923.png
上述代码块中定义了一个 example19 类继承自 JFrame。该类中使用 BorderLayout 布局管理器将窗口分为两部分,其中,CENTER 区域放置了一个标签 label,用于显示普通样式的文本;SOUTH 区域放置了一个 JPanel 面板,在 JPanel 面板中放置了 bold 和 italic 两个复选框,并为这两个按钮注册监听事件,通过判断这两个按钮是否选中来改变界面字体的样式

2、JRadioButton

JRadionButton 组件被称为单选组件,与 JCheckBox 复选框不同的是,单选按钮只能选中一个。就像随身听上的播放和快进按钮,当按下一个,先前按下的按钮就会自动弹起。对于 JRadioButton 按钮来说,当一个按钮被选中时,先前被选中的按钮就会自动取消选中

由于 JRadionButton 组件本身具备这种功能,因此若想实现 JRadioButton 按钮之间的互斥,需要使用 javax.swing.ButtonGroup 类,它是一个**不可见的组件,不需要将其添加到容器中显示,只是逻辑上表示一个单选按钮将多个 JRadioButton 按钮添加到同一个单选按钮组对象中(且必须),就能实现按钮的单选功能。**下表列举了创建 JRadioButton 对象常见的构造方法。

方法描述 功能说明
JRadioButton() 创建一个没有文本信息、初始状态未被选中的单选框
JRadioButton(String text) 创建一个带有文本信息、初始状态未被选定的单选框
JRadioButton(String text, boolean selected) 创建一个具有文本信息,并指定初始状态(选中/未选中)0 的单选框

接下来通过一个案例来演示 JRadioButton 组件的用法,如下所示。

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. public class example20 extends JFrame {
  5. private ButtonGroup group; //单选按钮组对象
  6. private JPanel panel; //JPanel 面板用于放置三个 JRadioButton 按钮
  7. private JPanel pallet; //JPanel 面板作为调色板
  8. public example20() {
  9. pallet = new JPanel();
  10. this.add(pallet, BorderLayout.CENTER); //将调色板放置在 CENTER 域
  11. panel = new JPanel();
  12. group = new ButtonGroup();
  13. //调用 addJRadioButton()方法
  14. addJRadioButton("灰");
  15. addJRadioButton("粉");
  16. addJRadioButton("黄");
  17. this.add(panel, BorderLayout.SOUTH);
  18. this.setSize(300, 300);
  19. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  20. this.setVisible(true);
  21. }
  22. /**
  23. * JRadioButton 按钮的文本信息 用于创建一个带有文本信息的 JRadioButton 按钮
  24. * 将按钮添加到 panel 面板和 ButtonGroup 中,并添加监听器
  25. */
  26. private void addJRadioButton(final String text) {
  27. JRadioButton radioButton = new JRadioButton(text);
  28. group.add(radioButton);
  29. panel.add(radioButton);
  30. radioButton.addActionListener(new ActionListener() {
  31. public void actionPerformed(ActionEvent arg0) {
  32. Color color = null;
  33. if ("灰".equals(text)) {
  34. color = Color.GRAY;
  35. } else if ("粉".equals(text)) {
  36. color = Color.PINK;
  37. } else if ("黄".equals(text)) {
  38. color = Color.YELLOW;
  39. } else {
  40. color = Color.WHITE;
  41. }
  42. pallet.setBackground(color);
  43. }
  44. });
  45. }
  46. public static void main(String[] args) {
  47. new example20();
  48. }
  49. }

运行程序,会生成一个窗体,单击“粉”单选框后,效果如下图所示。
QQ截图20200626162102.png
上述代码块中定义了一个 example20 类继承自 JFrame。在 JRadioButtonDemo 中使用 BorderLayout 布局管理器将窗口分为两部分,其中,CENTER 区域放置了一个 JPanel 面板 pallet 作为调色板;SOUTH 区域也放置了一个 JPanel 面板 panel,在 panel 面板中添加了“灰”“粉”“黄”3 个 JRadioButton 按钮。当单击这 3 个不同的按钮时,pallet 面板的背景色就会相应的变成灰色、粉色或者黄色。

由于 3 个 JRadioButton 按钮都要添加到 panel 面板和 ButtonGroup 按钮组件中,当为它们添加事件监听时,会有很多重复的代码,因此可以把这些多重复的代码抽取到 addRadioButton()方法中,在该方法中将接收的 String 类型的参数 text 作为创建的 JRadioButton 按钮的文本信息。

33~47 行是为 JRadioButton 按钮添加事件监听器的代码,用来响应用户单击单选按钮的操作。在 actionPerformed()方法中,定义一个 Color 类型的变量 color,并根据方法传入的 text 值进行判断。若 text 为字符串 “灰”,则 color = Color.GRAY;若 text 为字符串 “粉”,则 color = Color.PINK;若 text 为字符串 “黄”,则 color = Color.YELLOW,否则 color = Color.WHITE。最后调用 pallet 的 setBackground(Color color)方法,根据参数 color 的值设置 pallet 的背景颜色。