本文目录导读:
在Java Swing中,JRadioButton 配合 ButtonGroup 可以实现单选功能(即一组按钮中只能选中一个),下面是详细的使用方法和示例。
基本概念
- JRadioButton:单选按钮控件
- ButtonGroup:逻辑分组器,确保同组按钮互斥
- ItemListener / ActionListener:监听选中状态变化
完整示例代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RadioButtonDemo extends JFrame {
private JRadioButton maleRadio, femaleRadio, otherRadio;
private ButtonGroup genderGroup;
private JLabel resultLabel;
public RadioButtonDemo() {
// 设置窗口
setTitle("JRadioButton 示例");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(300, 200);
// 创建单选按钮
maleRadio = new JRadioButton("男");
femaleRadio = new JRadioButton("女");
otherRadio = new JRadioButton("其他");
// 默认选中"男"
maleRadio.setSelected(true);
// 创建按钮组(必须使用ButtonGroup,否则单选不生效)
genderGroup = new ButtonGroup();
genderGroup.add(maleRadio);
genderGroup.add(femaleRadio);
genderGroup.add(otherRadio);
// 添加监听器
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JRadioButton selected = (JRadioButton) e.getSource();
resultLabel.setText("选中: " + selected.getText());
}
};
maleRadio.addActionListener(listener);
femaleRadio.addActionListener(listener);
otherRadio.addActionListener(listener);
// 显示结果的标签
resultLabel = new JLabel("选中: 男");
// 添加组件到窗口
add(maleRadio);
add(femaleRadio);
add(otherRadio);
add(resultLabel);
// 设置可见
setVisible(true);
}
public static void main(String[] args) {
// 使用SwingUtilities确保线程安全
SwingUtilities.invokeLater(() -> new RadioButtonDemo());
}
}
常用方法
| 方法 | 说明 |
|---|---|
setSelected(boolean) |
设置/取消选中状态 |
isSelected() |
判断是否选中 |
setText(String) |
设置按钮文字 |
getText() |
获取按钮文字 |
setEnabled(boolean) |
启用/禁用按钮 |
addActionListener() |
添加动作监听器 |
addItemListener() |
添加项目监听器(更精细) |
使用 ItemListener 替代 ActionListener
如果需要区分“选中”和“取消选中”,使用 ItemListener:
maleRadio.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
System.out.println("男 被选中");
} else if (e.getStateChange() == ItemEvent.DESELECTED) {
System.out.println("男 被取消选中");
}
}
});
获取当前选中的按钮(遍历ButtonGroup)
public String getSelectedGender() {
for (AbstractButton button : Collections.list(genderGroup.getElements())) {
if (button.isSelected()) {
return button.getText();
}
}
return null;
}
完整功能示例(含提交按钮)
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collections;
public class RadioButtonSubmitDemo extends JFrame {
private JRadioButton opt1, opt2, opt3;
private ButtonGroup group;
public RadioButtonSubmitDemo() {
setTitle("单选提交示例");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new java.awt.FlowLayout());
setSize(300, 200);
opt1 = new JRadioButton("选项 A");
opt2 = new JRadioButton("选项 B");
opt3 = new JRadioButton("选项 C");
opt1.setSelected(true);
group = new ButtonGroup();
group.add(opt1);
group.add(opt2);
group.add(opt3);
JButton submitBtn = new JButton("提交");
JLabel result = new JLabel("请选择一项");
submitBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (AbstractButton btn : Collections.list(group.getElements())) {
if (btn.isSelected()) {
result.setText("你选择了: " + btn.getText());
return;
}
}
result.setText("未选择任何选项");
}
});
add(opt1);
add(opt2);
add(opt3);
add(submitBtn);
add(result);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new RadioButtonSubmitDemo());
}
}
注意事项
- 必须使用 ButtonGroup:否则多个JRadioButton可以同时选中,失去单选效果
- ButtonGroup只负责逻辑互斥,不负责UI布局,你需要自己用Layout管理位置
- 默认没有选中项:建议调用
setSelected(true)设置一个默认值,否则用户无法取消选择(只能切换) - 线程安全:创建和操作Swing组件建议在
SwingUtilities.invokeLater()中执行
运行效果

(在你的IDE中运行上述代码即可看到效果:三个单选按钮和一个显示结果的标签)
这些示例覆盖了JRadioButton的常见用法,你可以根据实际需求调整。