Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过鼠标单击启用一个JButton,然后通过迭代禁用所有其他JButton?_Java_Swing_Iteration_Jbutton_Isenabled - Fatal编程技术网

Java 如何通过鼠标单击启用一个JButton,然后通过迭代禁用所有其他JButton?

Java 如何通过鼠标单击启用一个JButton,然后通过迭代禁用所有其他JButton?,java,swing,iteration,jbutton,isenabled,Java,Swing,Iteration,Jbutton,Isenabled,JPanel中有12个按钮。我想点击其中一个,并禁用所有其他(它将被“突出显示”)。然后,如果我单击一个禁用的,那么前一个将被禁用,并且过程是相同的。考虑到有12个按钮,并且我希望避免重复代码,我希望使用迭代和自定义方法来实现这一点 假设已经声明了12个jbutton。然后,我们创建一个JButton的ArrayList来存储它们,并创建一个boolean的ArrayList来存储它们的布尔值: ArrayList<JButton> arrayOfButtons = new Arra

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

假设已经声明了12个jbutton。然后,我们创建一个JButton的ArrayList来存储它们,并创建一个boolean的ArrayList来存储它们的布尔值:

ArrayList<JButton> arrayOfButtons = new ArrayList<JButton>();
ArrayList<Boolean> arrayOfBooleans = new ArrayList<Boolean>();
然后我们通过迭代arrayOfButtons将其启用状态存储在arrayOfBooleans中:

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);
for (int i = 0; i < arrayOfButtons.size(); i++) {
    arrayOfBooleans.add(arrayOfButtons.get(i).isEnabled());
}
for(int i=0;i
现在,我如何通过迭代arrayOfButtons实现MouseListener并创建通过排除启用系统?这个想法非常简单:“启用一个,禁用其他”。但我不知道在实践中如何做到这一点

我非常感谢你

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

虽然上下文有点轻,为什么不使用
JToggleButton
s呢

请查看以了解更多详细信息

这也意味着您可以将所有按钮组合成一个
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);
            }
        }
    }
}

导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.ButtonGroup;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JToggleButton;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公共类切换按钮{
公共静态void main(字符串[]args){
新的切换按钮();
}
公共切换按钮(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
按钮的私有列表;
私有按钮组commonButtonGroup;
公共测试窗格(){
commonButtonGroup=新建ButtonGroup();
listOfButtons=新的ArrayList(25);
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
对于(int-index=0;index<10;index++){
JToggleButton tb=新的JToggleButton(Integer.toString(index));
commonButtonGroup.add(tb);
按钮列表。添加(tb);
添加(tb、gbc);
}
}
}
}

我不知道“按钮组”这样的东西的存在。这可能真的很有用。我也会考虑JToggleButton。我知道这没有任何意义,但这正是我实现MouseListener(而不是ActionListener)的原因。谢谢你的回答!我应该指出,您可以考虑使用
JRadioButton
而不是
JToggleButton
,但这将归结为您试图实现的目标