【问题标题】:Is it possible to make a JToggleButton deselect other JToggleButton to have a similar effect to traditional radio buttons?是否可以使 JToggleButton 取消选择其他 JToggleButton 以具有与传统单选按钮类似的效果?
【发布时间】:2019-11-09 10:30:31
【问题描述】:

我实现了以下 JDialog:

[ jToggleButton1 ]     [ jToggleButton2 ]     [ jToggleButton2 ]

我希望当用户按下 (-toggles-) 任何 JToggleButtons 时,其他两个将其状态更改为未选中。 这将模拟经典的“一次只按下一个”按钮集。

我已经使用以下方法实现了这种行为:

private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // do stuff
        btn1.setSelected(true);
        btn2.setSelected(false);
        btn3.setSelected(false);
}

private void btn2ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // do stuff
        btn1.setSelected(false);
        btn2.setSelected(true);
        btn3.setSelected(false);
}

private void btn3ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // do stuff
        btn1.setSelected(false);
        btn2.setSelected(false);
        btn3.setSelected(true);
}

虽然显示的示例有 3 个按钮,但我的实际场景有 15/20 个按钮。 这种实现功能的方式显然效率不高。

  1. 是否有任何其他设计模式可以自动选择一个?
  2. JToggleButtons 是否实现了任何可以使用的功能?

注意:如果相关,我正在使用 Netbeans 集成 UI 编辑器来开发所有 Java swing JFrames/JDialogs。

【问题讨论】:

  • 注意:每次单击按钮时都会调用 ActionListener。您发布的逻辑似乎表明您只想在当前未选择按钮时调用逻辑。如果是这样,那么您应该在切换按钮上使用ItemListener,然后您只能在当前未选择按钮时执行逻辑。见How to Write an ItemListener
  • 感谢您的澄清。在这种特定情况下,我实际上并不在意,因为在已选择按钮时按下按钮只会将主窗口更新到与现在完全相同的状态,但在其他情况下它可能是相关的,所以最好知道如何正确实现ItemListener

标签: java swing jtogglebutton


【解决方案1】:

尝试将您的按钮添加到 ButtonGroup:

ButtonGroup group = new ButtonGroup();
group.add(button1);
group.add(button2);
...

【讨论】:

  • 附带说明:这也可以使用 Netbeans IDE UI 构建器来完成。一个“按钮组”对象需要被拖拽(显然是不可见的)然后你选择所有按钮并修改“按钮组”属性。
【解决方案2】:

一个经典的模式是创建一个单一的 actionlistener 函数来关闭(在您的情况下取消选择)所有按钮,然后获取操作源并将其打开。最后,您在所有按钮上设置了这个动作监听器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多