0

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

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

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

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

4

3 回答 3

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;
            }
        }

这是ActionListener所有 JRadioButtons的单曲

    ActionListener listener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            JRadioButton btn = (JRadioButton) e.getSource();
            System.out.println("Selected Button = " + btn.getName());
        }
    };
于 2013-07-15T11:46:05.373 回答
0

动作侦听器被传递了一个 ActionEvent。您可以创建一个侦听器,将其绑定到所有按钮,然后使用以下命令检查事件源getSource()

void actionPerformed(ActionEvent e) {
   Object source = e.getSource();
   ...
}
于 2013-07-15T11:33:57.050 回答
0

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

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
}
...
于 2013-07-15T11:39:47.343 回答