【问题标题】:Prevent a toggle group from not having a toggle selected - Java FX防止切换组未选择切换 - Java FX
【发布时间】:2018-03-31 19:09:12
【问题描述】:

我有一个带有两个切换按钮的切换组,看起来应该像这样(黄色切换是选定的切换)。

但是,当我单击选定的切换时,两个切换都未选中,看起来像这样。

然后,如果我尝试获取是否选择了切换,我会得到一个nullPointerException

(Boolean) toggleGroup.getSelectedToggle().getUserData();

是否可以防止选中的切换被点击时被取消选中?

【问题讨论】:

  • RadioButtons 具有您正在寻找的功能。你能用那些代替ToggleButtons 吗?

标签: javafx togglebutton


【解决方案1】:

这个对我有用。如果新选择的元素为null,则表示没有选择的元素,因此只需选择前一个(即“oldValue”)

toggleGroup.selectedToggleProperty().addListener((obsVal, oldVal, newVal) -> {
    if (newVal == null)
        oldVal.setSelected(true);
});

【讨论】:

  • 非常好的和快速的方法。谢谢!
【解决方案2】:

您可以尝试以下代码来创建持久切换。

/**
 * Create a toggle group of buttons where one toggle will always remain switched on.
 */
class PersistentButtonToggleGroup extends ToggleGroup {
  PersistentButtonToggleGroup() {
    super();
    getToggles().addListener(new ListChangeListener<Toggle>() {
        @Override public void onChanged(Change<? extends Toggle> c) {
        while (c.next()) {
          for (final Toggle addedToggle : c.getAddedSubList()) {
            ((ToggleButton) addedToggle).addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
              @Override public void handle(MouseEvent mouseEvent) {
                if (addedToggle.equals(getSelectedToggle())) mouseEvent.consume();
              }
            });
          }
        }
      }
    });
  }
}

这只是对鼠标事件做出反应,因此如果您想考虑键盘事件或更改代码中的切换,这可能并不理想。


博客条目Button of Choice: Use ToggleButtons as RadioButtons 中可能定义了一种类似但可能更完整的方法,我没有尝试过。


也许完成您想要的最简单的行为可能是只使用 RadioButtons 而不是 ToggleButtons。

另外,如果您希望按钮的样式类似于 ToggleButtons,而不是 RadioButtons,那么您可以尝试以下样式技术:How to make a RadioButton look like regular Button in JavaFX

RadioButton radioButton=new RadioButton("Radio");
radioButton.getStyleClass().remove("radio-button");
radioButton.getStyleClass().add("toggle-button");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 2019-08-30
    • 2020-10-20
    • 2023-03-08
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多