JRadioButton 是一个图形用户界面组件,它提供两种状态:选中 和 未选中,它通常用于让用户从多个选项中选择一个,选择性别、选择运输方式等。

JRadioButton 的核心特性
- 单选逻辑:
JRadioButton本身不具备单选功能,如果你将多个JRadioButton直接添加到窗口(如JFrame)中,它们可以被同时选中。 - 按钮组 (
ButtonGroup):为了实现“单选”效果,必须将多个JRadioButton放入一个ButtonGroup中。ButtonGroup是一个逻辑容器,它不负责显示,只负责管理,一旦放入ButtonGroup,组内任何时候只能有一个按钮被选中。 - 视觉反馈:
JRadioButton通常会带有一个小圆圈,被选中时圆圈内会有一个实心点。
基本用法:创建和添加
下面是一个最简单的例子,展示如何创建两个单选按钮,并将它们放入一个按钮组中。
import javax.swing.*;
import java.awt.*;
public class SimpleRadioButtonExample {
public static void main(String[] args) {
// 1. 创建窗口
JFrame frame = new JFrame("JRadioButton 基本示例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 150);
frame.setLayout(new FlowLayout()); // 使用流式布局
// 2. 创建 JRadioButton
JRadioButton maleButton = new JRadioButton("男");
JRadioButton femaleButton = new JRadioButton("女");
// 3. 创建 ButtonGroup 并将按钮添加到组中
// 这是实现单选功能的关键!
ButtonGroup genderGroup = new ButtonGroup();
genderGroup.add(maleButton);
genderGroup.add(femaleButton);
// 4. (可选) 设置一个默认选中的按钮
maleButton.setSelected(true);
// 5. 将按钮添加到窗口的内容面板
frame.add(maleButton);
frame.add(femaleButton);
// 6. 显示窗口
frame.setVisible(true);
}
}
代码解释:
- 创建
JRadioButton:使用new JRadioButton("文本标签")来创建。 - 创建
ButtonGroup:ButtonGroup是javax.swing.ButtonGroup类的实例。 - 添加到组:使用
buttonGroup.add(jRadioButton)将按钮添加到组中,这一步至关重要。 - 设置默认选中:使用
jRadioButton.setSelected(true)来指定哪个按钮在程序启动时被默认选中。
获取用户的选择
仅仅显示按钮是不够的,我们还需要知道用户选择了哪个选项,这通常通过 ActionListener 或 ItemListener 来实现。
使用 ActionListener
当用户点击 JRadioButton 时,会触发 ActionEvent,我们可以通过获取事件源来判断是哪个按钮被点击了。

// ... (接上面的代码,在 frame.setVisible(true) 之前添加)
// 6. 添加 ActionListener
maleButton.addActionListener(e -> {
System.out.println("选择了: 男");
});
femaleButton.addActionListener(e -> {
System.out.println("选择了: 女");
});
// 6. 显示窗口
frame.setVisible(true);
注意:使用 ActionListener 时,无论按钮是从选中变为未选中,还是从未选中变为选中,都会触发事件,打印出的信息可能不准确(点击已选中的按钮时也会打印)。
使用 ItemListener (更推荐)
JRadioButton 实现了 Selectable 接口,因此可以添加 ItemListener。ItemListener 的 itemStateChanged 方法会提供一个 ItemEvent,我们可以通过 e.getStateChange() 来判断状态是 选中 (ItemEvent.SELECTED) 还是 未选中 (ItemEvent.DESELECTED)。
// ... (接上面的代码,在 frame.setVisible(true) 之前添加)
// 6. 添加 ItemListener
ItemListener itemListener = e -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
// 只有在变为选中状态时才处理
JRadioButton source = (JRadioButton) e.getSource();
System.out.println("当前选择: " + source.getText());
}
};
maleButton.addItemListener(itemListener);
femaleButton.addItemListener(itemListener);
// 7. 显示窗口
frame.setVisible(true);
为什么 ItemListener 更好?
因为它只在按钮的选中状态发生改变时触发,可以准确捕捉到用户的选择。
完整的、实用的示例
下面是一个更完整的示例,它包含一个标签(用于显示选择结果)和一个按钮(用于触发获取操作),演示了如何将 JRadioButton 集成到更复杂的界面中。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class CompleteRadioButtonExample {
public static void main(String[] args) {
// 在事件调度线程中创建和显示GUI,这是Swing的最佳实践
SwingUtilities.invokeLater(() -> {
// 1. 创建主窗口
JFrame frame = new JFrame("JRadioButton 完整示例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 250);
// 2. 使用BorderLayout作为主布局
frame.setLayout(new BorderLayout(10, 10));
// 3. 创建一个面板来放置单选按钮
JPanel radioPanel = new JPanel(new GridLayout(3, 1, 5, 5)); // 3行1列的网格布局
// 4. 创建单选按钮和按钮组
JRadioButton appleRadio = new JRadioButton("苹果");
JRadioButton bananaRadio = new JRadioButton("香蕉");
JRadioButton orangeRadio = new JRadioButton("橙子");
ButtonGroup fruitGroup = new ButtonGroup();
fruitGroup.add(appleRadio);
fruitGroup.add(bananaRadio);
fruitGroup.add(orangeRadio);
// 设置默认选中
appleRadio.setSelected(true);
// 将按钮添加到面板
radioPanel.add(appleRadio);
radioPanel.add(bananaRadio);
radioPanel.add(orangeRadio);
// 5. 创建一个标签来显示结果
JLabel resultLabel = new JLabel("请选择一个水果。", JLabel.CENTER);
resultLabel.setBorder(BorderFactory.createEtchedBorder()); // 添加边框使其更明显
// 6. 创建一个按钮来触发操作
JButton submitButton = new JButton("确认选择");
// 7. 创建一个面板来放置按钮和标签,使用流式布局
JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
bottomPanel.add(resultLabel);
bottomPanel.add(submitButton);
// 8. 将所有组件添加到主窗口
frame.add(radioPanel, BorderLayout.CENTER);
frame.add(bottomPanel, BorderLayout.SOUTH);
// 9. 添加事件监听器
submitButton.addActionListener(e -> {
String selectedFruit = "";
if (appleRadio.isSelected()) {
selectedFruit = "苹果";
} else if (bananaRadio.isSelected()) {
selectedFruit = "香蕉";
} else if (orangeRadio.isSelected()) {
selectedFruit = "橙子";
}
resultLabel.setText("您选择了: " + selectedFruit);
});
// 10. 显示窗口
frame.setLocationRelativeTo(null); // 窗口居中
frame.setVisible(true);
});
}
}
JRadioButton 的常用方法
| 方法 | 描述 |
|---|---|
JRadioButton(String text) |
创建一个带有指定文本标签的单选按钮。 |
JRadioButton(String text, Icon icon) |
创建一个带有文本和图标的单选按钮。 |
isSelected() |
返回 boolean 值,表示按钮当前是否被选中。 |
setSelected(boolean b) |
设置按钮的选中状态。true 为选中,false 为未选中。 |
setText(String text) |
设置按钮上显示的文本。 |
getText() |
获取按钮上显示的文本。 |
setEnabled(boolean b) |
设置按钮是否可用。false 时按钮会变灰,且不可点击。 |
addItemListener(ItemListener l) |
添加一个项目监听器,用于监听选中状态的变化。 |
addActionListener(ActionListener l) |
添加一个动作监听器,用于监听点击动作。 |
- 核心:
JRadioButton必须与ButtonGroup配合使用才能实现单选功能。 - 监听:使用
ItemListener来精确捕捉用户的选择变化,比ActionListener更可靠。 - 布局:通常将
JRadioButton放入JPanel中,再配合其他布局管理器(如GridLayout,FlowLayout)来组织界面。 - 获取值:通过
isSelected()方法在需要的时候(例如点击“确认”按钮后)检查哪个按钮被选中。
希望这个详细的解释能帮助你完全掌握 Java Swing 中的 JRadioButton 组件!
