【问题标题】:How to disable a JRadioButton inside a ButtonGroup in Java如何在 Java 中禁用 ButtonGroup 中的 JRadioButton
【发布时间】:2014-05-10 01:11:46
【问题描述】:

我在 Java 的 ButtonGroup 中有四个 JRatioButton。前两个是启用的,另外两个是禁用的。如果选择了一个特定的 JRatioButton,我需要启用两个禁用的 JRatioButton。

我正在尝试查找按钮的状态并启用禁用的按钮,显然我找到了禁用状态但没有更改该状态的按钮。

private void activateButtons() {
    Enumeration<AbstractButton> elements = myButtonGroup.getElements();
    while (elements.hasMoreElements()) {
          AbstractButton button = (AbstractButton)elements.nextElement();
          if (button.isEnabled()) {
            System.out.println("This button is disabled! The text of the button is: '" + button.getText() + "'");
            button.setEnabled(true);
          }
    }
}

我正在获取禁用按钮的文本,但我无法禁用它们。

有什么帮助吗?谢谢!

【问题讨论】:

  • 您只需要保留对ButtonGroup 对象或jRadioButton 对象本身的引用,并在必要时禁用它们。 ButtonGroup 提供了一个getElements() 方法
  • 您可能正在寻找 enabled 属性。
  • 我编辑了问题,如您所见,我尝试对 ButtonGroup 使用 getElements() 方法,我可以找到禁用的按钮并使用控制台显示文本,但我无法使用禁用 jRadioButton 的 setEnabled 方法....不知道为什么...感谢您的帮助
  • 我在代码中有一个错误,实际上正在工作,但我试图启用一个已经启用的按钮......我稍后会发布答案

标签: java swing jradiobutton


【解决方案1】:

我不知道您在查找第二组单选按钮的引用时是否有任何问题,或者您只是无法禁用单选按钮。

对于第一个问题,很简单,只需保留第二组单选按钮的引用即可。

对于第二个问题,您需要将 JRadioButton 子类化,因为我发现您不能简单地为单选按钮对象调用禁用。

子类的代码示例是这样的。

this.editable = editable;
if (editable) {
    this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    super.enableEvents(Event.MOUSE_DOWN | Event.MOUSE_UP);
} else {
    this.setCursor(CursorFactory.createUnavailableCursor());
    super.disableEvents(Event.MOUSE_DOWN | Event.MOUSE_UP);
}

【讨论】:

  • 嘿,肖恩,如果我直接使用 JrRadioButton 参考,编辑器会说“它无法解析为类型”错误。我认为是因为按钮位于 ButtonGroup 内,实际上我需要访问 ButtonGroup 内的按钮才能对它们做“某事”......感谢您的帮助
  • 我刚刚检查了 API,按钮组有一个名为 getElements() 的方法,它返回参与该组的所有按钮。您可以在此集合中进行迭代。
【解决方案2】:

试试这个,它有效。

AbstractButton button = ...

button.getModel().setEnabled(true/false)

【讨论】:

    【解决方案3】:

    是的,你 setEnabled(true) 启用了 RadioButton。
    所以在这里编辑,希望可以帮助某人。

    private void activateButtons() 
    {
        Enumeration<AbstractButton> elements = myButtonGroup.getElements();
        while (elements.hasMoreElements()) 
        {
              AbstractButton button = (AbstractButton)elements.nextElement();
              if (button.isEnabled())     // if enabled (true) 
              {
                System.out.println("This button is disabled! The text of the button is: '" + button.getText() + "'");
                button.setEnabled(false); // set it disabled (false)
              }
        }
    }
    

    感谢@Hannibal,您的帖子拯救了我的一天。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2010-09-17
      • 2015-06-15
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 2012-12-10
      相关资源
      最近更新 更多