JRadioButton单选按钮组

wen java案例 1

本文目录导读:

  1. 基本概念
  2. 完整示例代码
  3. 常用方法
  4. 使用 ItemListener 替代 ActionListener
  5. 获取当前选中的按钮(遍历ButtonGroup)
  6. 完整功能示例(含提交按钮)
  7. 注意事项
  8. 运行效果

在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());
    }
}

注意事项

  1. 必须使用 ButtonGroup:否则多个JRadioButton可以同时选中,失去单选效果
  2. ButtonGroup只负责逻辑互斥,不负责UI布局,你需要自己用Layout管理位置
  3. 默认没有选中项:建议调用 setSelected(true) 设置一个默认值,否则用户无法取消选择(只能切换)
  4. 线程安全:创建和操作Swing组件建议在 SwingUtilities.invokeLater() 中执行

运行效果

JRadioButton单选按钮组
(在你的IDE中运行上述代码即可看到效果:三个单选按钮和一个显示结果的标签)

这些示例覆盖了JRadioButton的常见用法,你可以根据实际需求调整。

抱歉,评论功能暂时关闭!