本文目录导读:
在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的常见用法,你可以根据实际需求调整。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播