2017-10-19 92 views
0

我有一个带有两个切换按钮的切换组,应该看起来像这样(黄色切换是所选切换)。防止切换组没有选择切换 - Java FX

enter image description here

然而,当我在选择点击切换切换都成为选择,而这个样子。

enter image description here

然后,如果我试图让切换是否被选中,我得到一个nullPointerException

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

是否可以防止所选开关被点击时被取消选中?

+0

'RadioButton's有你要找的功能。你可以使用那些而不是'ToggleButton's? –

回答

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");