【问题标题】:Action listener for multiple radio buttons多个单选按钮的动作监听器
【发布时间】:2023-04-06 18:00:01
【问题描述】:

我打算编写一个程序,让用户可以从 8*8 矩阵中进行选择。因为我的声誉低于 10,所以我不能包含图像,但请放心,它只是一个普通的 8*8 矩阵。我计划在我的 Java 程序中使用 8*8=64 单选按钮将其可视化。用户一次只能选择一个单选按钮,这意味着所有 64 个按钮都属于同一个按钮组。

现在,我该如何管理动作监听器?为 64 个单选按钮中的每一个设置 64 个单独的动作侦听器是不可能的(真的很无聊和无聊)。由于所有 64 个单选按钮都在同一个按钮组中,有什么方法可以设置 只有一个 事件侦听器来检查选择了哪个按钮?

如果我提供的任何信息不清楚,请告诉我:)

PS:我正在使用 Netbeans 设计工具

【问题讨论】:

  • “有什么方法可以让我只设置一个事件监听器来检查选择了哪个按钮?” - 是的。如果没有代码,提供建议有点困难,但本质上,您将创建 ActionListener 的实例并在创建它们时设置每个按钮
  • "bcz .​​. pls" 1) 请使用“you”、“your”和“please”等词的正确拼写。这使人们更容易理解和帮助。 2) 请在句首加一个大写字母。还要为单词 I 使用大写字母,以及 JEE 或 WAR 等缩写词和首字母缩略词。这使人们更容易理解和帮助。
  • @andrewThompson 对不起,我是新人 :(
  • 无需道歉,通常认为“将来会尝试”更好。 :)

标签: java swing netbeans actionlistener jradiobutton


【解决方案1】:

创建二维JRadioButton 类似数组

        JRadioButton[][] jRadioButtons = new JRadioButton[8][];
        ButtonGroup bg = new ButtonGroup();
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(8, 8));
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                JRadioButton btn = new JRadioButton();
                btn.addActionListener(listener);
                btn.setName("Btn[" + i + "," + j + "]");
                bg.add(btn);
                panel.add(btn);
                // can be used for other operations
                jRadioButtons[i][j] = btn;
            }
        }

这里是所有 JRadioButtons 的单个 ActionListener

    ActionListener listener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            JRadioButton btn = (JRadioButton) e.getSource();
            System.out.println("Selected Button = " + btn.getName());
        }
    };

【讨论】:

  • 我想在netbeans设计工具中编写我的程序(为了方便设计),如何将它集成到netbeans上生成的代码?
  • @MDYousufAzad 为了方便设计) 听起来是这个工具带来了问题,毕竟除了最简单的上下文之外,不是那么方便 ;-)
【解决方案2】:

动作监听器被传递了一个 ActionEvent。可以做一个监听器,绑定到所有按钮,用getSource()查看事件源:

void actionPerformed(ActionEvent e) {
   Object source = e.getSource();
   ...
}

【讨论】:

  • 你在说这个吗? 'radioButton.addActionListener(ListenerClass);'如果是,那么我必须分别绑定每个radioButton,对吗?有没有办法我只能这样做一次并影响所有单选按钮。他们都被buttonGroup绑定,所以我想这应该是可行的吧?
  • @MDYousufAzad 是的。您可以通过buttonGroup.getElements() 为循环中的所有按钮调用它(或者,如果您在循环中创建按钮,那么您可以直接在那里执行),但它们都可以共享同一个侦听器对象
  • buttonGroup.getElements() 这个方法可能有用。 tnx
  • 取消选择按钮时是否调用 actionPerformed()?这意味着在组中选择一个新的单选按钮将触发两个事件:一个用于刚刚取消选择的按钮,一个用于刚刚选择的按钮。
  • @mins 不。如果你也想听,可以使用ItemListener
【解决方案3】:

我认为您正在实现这样的单选按钮:

JRadioButton radioButton = new JRadioButton("TEST");

如果您这样做,您必须使用以下语句为每个按钮设置一个 ActionListener(例如在 for 循环中初始化和设置 ActionListener):

radioButton.addActionListener(this)(如果你在同一个类中实现了ActionListener)

最后,您可以转到您的 actionPerformed(ActionEvent e) 方法并使用 e.getSource 获取源代码,然后执行 if else 之类的操作以获取正确的 RadioButton:

if(e.getSource == radioButton1)
{
  // Action for RadioButton 1
}
else if(e.getSource == radioButton2)
{
  // Action for RadioButton 2
}
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-24
    • 2012-02-07
    • 2018-11-22
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2014-08-04
    相关资源
    最近更新 更多