jos*_*Lor 6 javafx togglebutton
我有一个带有两个切换按钮的切换组,看起来像这样(黄色切换是选定的切换).
但是,当我单击选定的切换时,两个切换都会变为未选中,看起来像这样.
然后,如果我试图判断是否选择了切换,我会得到一个nullPointerException.
(Boolean) toggleGroup.getSelectedToggle().getUserData();
Run Code Online (Sandbox Code Playgroud)
是否可以防止单击选定的切换时取消选择?
Wes*_*eso 11
这个对我有用.如果新选择的元素为null,则表示没有选定元素,因此只需选择前一个元素(即"oldValue")
toggleGroup.selectedToggleProperty().addListener((obsVal, oldVal, newVal) -> {
if (newVal == null)
oldVal.setSelected(true);
});
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下代码来创建持久切换。
/**
* 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();
}
});
}
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这只是对鼠标事件做出反应,因此如果您要考虑键盘事件或更改代码中的切换,则可能不理想。
在博客条目“选择的按钮:将ToggleButtons用作RadioButtons”中,可以定义一种我尚未尝试过的类似但可能更完整的方法。
完成您想要的目标的最简单的行为可能就是仅使用RadioButtons而不是ToggleButtons。
此外,如果您希望按钮的样式类似于ToggleButtons,而不是RadioButtons,那么您可以尝试以下方法中概述的样式技术:如何使RadioButton看起来像JavaFX中的常规Button。
RadioButton radioButton=new RadioButton("Radio");
radioButton.getStyleClass().remove("radio-button");
radioButton.getStyleClass().add("toggle-button");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2649 次 |
| 最近记录: |