1

JPanel 中有 12 个 JButton。我想单击其中一个并禁用所有其他(它将被“突出显示”)。然后,如果我点击一个禁用的,那么前一个被禁用并且过程是相同的。考虑到有 12 个按钮并且我想避免重复代码,我想使用迭代和自定义方法来做到这一点。

考虑已经声明了 12 个 JButton。然后我们创建一个 JButton 的 ArrayList 来存储它们,并创建一个布尔值的 ArrayList 来存储它们的启用布尔值:

ArrayList<JButton> arrayOfButtons = new ArrayList<JButton>();
ArrayList<Boolean> arrayOfBooleans = new ArrayList<Boolean>();

我们将所有按钮添加到 arrayOfButtons:

arrayOfButtons.add(btn1);
arrayOfButtons.add(btn2);
arrayOfButtons.add(btn3);
arrayOfButtons.add(btn4);
arrayOfButtons.add(btn5);
arrayOfButtons.add(btn6);
arrayOfButtons.add(btn7);
arrayOfButtons.add(btn8);
arrayOfButtons.add(btn9);
arrayOfButtons.add(btn10);
arrayOfButtons.add(btn11);
arrayOfButtons.add(btn12);

然后我们通过遍历 arrayOfButtons 将它们的启用状态存储在 arrayOfBooleans 中:

for (int i = 0; i < arrayOfButtons.size(); i++) {
    arrayOfBooleans.add(arrayOfButtons.get(i).isEnabled());
}

现在,我如何实现 MouseListener 并通过迭代 arrayOfButtons 创建排除启用系统?这个想法很简单:“启用一个,禁用其他。”,但我无法弄清楚如何在实践中做到这一点。

我非常感谢你!

4

1 回答 1

2

“然后,如果我点击一个禁用的,那么前一个被禁用并且过程是相同的”没有意义。如果按钮被禁用,它将无法对用户的输入做出反应。

虽然上下文有点轻,但为什么不使用JToggleButtons 代替

查看如何使用按钮了解更多详细信息

这也意味着您可以将所有按钮分组为一个ButtonGroup,以确保一次只有一个按钮处于“活动状态”

用简单的例子更新

在此处输入图像描述

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class ToggleButtons {

    public static void main(String[] args) {
        new ToggleButtons();
    }

    public ToggleButtons() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private List<JToggleButton> listOfButtons;
        private ButtonGroup commonButtonGroup;

        public TestPane() {
            commonButtonGroup = new ButtonGroup();
            listOfButtons = new ArrayList<>(25);
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            for (int index = 0; index < 10; index++) {
                JToggleButton tb = new JToggleButton(Integer.toString(index));
                commonButtonGroup.add(tb);
                listOfButtons.add(tb);
                add(tb, gbc);
            }
        }
    }
}
于 2013-07-26T01:14:28.250 回答