按钮组件
在 Swing 程序设计中,按钮是较为常见的组件,用于触发特定的动作。Swing 提供了多种按钮组件:按钮、单选按钮、复选框等。本节将分别对这些按钮组件进行讲解。
JButton按钮
Swing 按钮由 JButton 对象表示,JButton 常用的构造方法如下。
-
public JButton():创建一个不带文本或图标的按钮。
-
public JButton(String text):创建一个带文本的按钮。
-
public JButton(Icon icon):创建一个带图标的按钮。
-
public JButton(String text, Icon icon):创建一个带文本和图标的按钮。
创建 JButton 对象后,如果要对 JButton 对象进行设置,则需要使用 JButton 类提供的方法。JButton 类的常用方法及其说明如表18.6所示。

【例18.15】演示不同效果的按钮(实例位置:资源包\TM\sl\18\15)
创建 JButtonTest 类,并继承 JFrame 类,在窗体中创建按钮组件,设置按钮的图标,为按钮添加动作监听器。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JButtonTest extends JFrame {
public JButtonTest() {
Icon icon = new ImageIcon("src/imageButtoo.jpg"); // 获取图片文件
setLayout(new GridLayout(3, 2, 5, 5)); // 设置网格布局管理器
Container c = getContentPane(); // 获取主容器
JButton btn[] = new JButton[6]; // 创建按钮数组
for (int i = 0; i < btn.length; i++) {
btn[i] = new JButton(); // 实例化数组中的对象
c.add(btn[i]); // 将按钮添加到容器中
}
btn[0].setText("不可用");
btn[0].setEnabled(false); // 设置按钮不可用
btn[1].setText("有背景色");
btn[1].setBackground(Color.YELLOW);
btn[2].setText("无边框");
btn[2].setBorderPainted(false); // 设置按钮边框不显示
btn[3].setText("有边框");
btn[3].setBorder(BorderFactory.createLineBorder(Color.RED)); // 添加红色线型边框
btn[4].setIcon(icon); // 为按钮设置图标
btn[4].setToolTipText("图片按钮"); // 设置鼠标悬停时提示的文字
btn[5].setText("可点击");
btn[5].addActionListener(new ActionListener() { // 为按钮添加监听事件
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(JButtonTest.this, "点击按钮"); // 弹出确认对话框
}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setTitle("创建不同样式的按钮");
setBounds(100, 100, 400, 200);
}
public static void main(String[] args) {
new JButtonTest();
}
}

JRadioButton单选按钮
Swing 单选按钮由 JRadioButton 对象表示。在 Swing 程序设计中,需要把多个单选按钮添加到按钮组中,当用户选中某个单选按钮时,按钮组中的其他单选按钮将不能被同时选中。
单选按钮
创建 JRadioButton 对象需要使用 JRadioButton 类的构造方法。JRadioButton 类常用的构造方法如下。
-
public JRadioButton():创建一个未被选中、文本未被设定的单选按钮。
-
public JRadioButton(Icon icon):创建一个未被选中、文本未被设定,但具有指定图标的单选按钮。
-
public JRadioButton(Icon icon, boolean selected):创建一个具有指定图标、选择状态,但文本未被设定的单选按钮。
-
public JRadioButton(String text):创建一个具有指定文本,但未被选中的单选按钮。
-
public JRadioButton(String text, Icon icon):创建一个具有指定文本、指定图标,但未被选中的单选按钮。
-
public JRadioButton(String text, Icon icon, boolean selected):创建一个具有指定的文本、指定图标和选择状态的单选按钮。
根据上述构造方法的相关介绍,不难发现,单选按钮的图标、文本和选择状态等属性能够被同时设定。例如,使用 JRadioButton 类的构造方法创建一个文本为 “选项A” 的单选按钮,关键代码如下:
JRadioButton rbtn = new JRadioButton("选项A");
按钮组
Swing 按钮组由 ButtonGroup 对象表示,多个单选按钮被添加到按钮组中后,能够实现 “选项有多个,但只能选中一个” 的效果。ButtonGroup 对象被创建后,可以使用 add() 方法把多个单选按钮添加到 ButtonGroup 对象中。例如,在应用程序窗体中定义一个单选按钮组,代码如下:
JRadioButton jr1 = new JRadioButton();
JRadioButton jr2 = new JRadioButton();
JRadioButton jr3 = new JRadioButton();
ButtonGroup group = new ButtonGroup();
group.add(jr1);
group.add(jr2);
group.add(jr3);
【例18.16】性别选择(实例位置:资源包\TM\sl\18\16)
创建 RadioButtonTest 类,并继承 JFrame 类,窗体中有男女两种性别可以供用户选择,但只能选择其中一种性别。
import javax.swing.*;
public class RadioButtonTest extends JFrame {
public RadioButtonTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("单选按钮的使用");
setBounds(100, 100, 240, 120);
getContentPane().setLayout(null); // 设置绝对布局
JLabel lblNewLabel = new JLabel("请选择性别:");
lblNewLabel.setBounds(5, 5, 120, 15);
getContentPane().add(lblNewLabel);
JRadioButton rbtnNormal = new JRadioButton("男");
rbtnNormal.setSelected(true);
rbtnNormal.setBounds(40, 30, 75, 22);
getContentPane().add(rbtnNormal);
JRadioButton rbtnPwd = new JRadioButton("女");
rbtnPwd.setBounds(120, 30, 75, 22);
getContentPane().add(rbtnPwd);
// 创建按钮组,把交互面板中的单选按钮添加到按钮组中
ButtonGroup group = new ButtonGroup();
group.add(rbtnNormal);
group.add(rbtnPwd);
}
public static void main(String[] args) {
RadioButtonTest frame = new RadioButtonTest(); // 创建窗体对象
frame.setVisible(true); // 使窗体可见
}
}
运行结果如图18.21所示,当选中某一个单选按钮时,另一个单选按钮会被取消选中状态。

JCheckBox复选框
复选框组件由 JCheckBox 对象表示。与单选按钮不同的是,窗体中的复选框可以被选中多个,这是因为每一个复选框都提供 “被选中” 和 “不被选中” 两种状态。JCheckBox 的常用构造方法如下。
-
public JCheckBox():创建一个文本、图标未被设定且默认未被选中的复选框。
-
public JCheckBox(Icon icon, Boolean checked):创建一个具有指定图标、指定初始时是否被选中,但文本未被设定的复选框。
-
public JCheckBox(String text, Boolean checked):创建一个具有指定文本、指定初始时是否被选中,但图标未被设定的复选框。
【例18.17】输出用户的所选内容(实例位置:资源包\TM\sl\18\17)
创建 CheckBoxTest 类,并继承 JFrame 类,窗体中有 3 个复选框按钮和一个普通按钮,当单击普通按钮时,在控制台中分别输出 3 个复选框的选中状态。
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
public class CheckBoxTest extends JFrame {
public CheckBoxTest() {
setBounds(100, 100, 170, 110); // 窗口坐标和大小
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c = getContentPane(); // 获取主容器
c.setLayout(new FlowLayout()); // 容器使用流布局
JCheckBox c1 = new JCheckBox("1"); // 创建复选框
JCheckBox c2 = new JCheckBox("2");
JCheckBox c3 = new JCheckBox("3");
c.add(c1); // 容器添加复选框
c.add(c2);
c.add(c3);
JButton btn = new JButton("打印"); // 创建打印按钮
btn.addActionListener(new ActionListener() { // 打印按钮动作事件
public void actionPerformed(ActionEvent e) {
// 在控制台分别输出三个复选框的选中状态
System.out.println(c1.getText() + "按钮选中状态:" + c1.isSelected());
System.out.println(c2.getText() + "按钮选中状态:" + c2.isSelected());
System.out.println(c3.getText() + "按钮选中状态:" + c3.isSelected());
}
});
c.add(btn); // 容器添加打印按钮
setVisible(true);
}
public static void main(String[] args) {
new CheckBoxTest();
}
}
选中第1、3个复选框后,运行结果如图18.22所示。

编程训练(答案位置:资源包\TM\sl\18\编程训练)
【训练9】模拟交通信号灯 使用图标和单选按钮模拟交通红绿灯,其中绿灯对应的单选按钮被默认选中。
【训练10】ASCII编码查看器 编写一个十进制的ASCII编码查看器,可以将字符转换成数字,也可以反向转换它们。