gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:17:57 29 4
gpt4 key购买 nike

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

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

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 创建排除启用系统?这个想法非常简单:“启用一个,禁用其他。”,但我不知道如何在实践中做到这一点。

非常感谢你!

最佳答案

“然后,如果我单击禁用的一个,则前一个将被禁用,并且过程是相同的” 没有意义。如果该按钮被禁用,它将无法对用户的输入使用react。

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

看看How to use buttons了解更多详情

这也意味着您可以将所有按钮分组到一个 ButtonGroup 中,这将负责确保一次只有一个按钮处于“Activity ”状态

更新了简单的示例

enter image description here

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 - 如何通过鼠标单击启用一个 JButton,然后通过迭代禁用所有其他 JButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17871318/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com