我有一个带有两个切换按钮的切换组(黄色切换是所选的切换)。
当我单击选定的切换时,两个切换都不会被选中并看起来像这样。
然后,如果我尝试选择是否选择了切换,我会得到一个。nullPointerException
可以防止所选的切换在单击时未被选中?
这对我有用。如果新的选定元素为null,则意味着没有选定的元素,因此只需选择上一个(即“ oldValue”)
您可以尝试以下代码来创建持久的切换。
toggleGroup.selectedToggleProperty().addListener((obsVal, oldVal, newVal) -> {
if (newVal == null)
oldVal.setSelected(true);
});
类似,但也许我没有尝试过的更完整的方法可能会在博客条目中定义
doceponton:使用togglebuttons用作radiobuttons.。
也许只能使用radiobuttons而不是toggleButtons来完成您想要的最简单行为。
如果您希望按钮像toggleButtons一样,而不是radiobuttons,则可以尝试使用以下概述的样式技术:如何使RadioButton看起来像Javafx中的常规按钮。
/**
* 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();
}
});
}
}
}
});
}
}
同样的问题,但我不希望活动完全开火
因此,我最终创建了一个togglebutton的子类,该子类在启动事件之前确保RadioButton radioButton=new RadioButton("Radio");
radioButton.getStyleClass().remove("radio-button");
radioButton.getStyleClass().add("toggle-button");
因此,取消选择按钮的唯一方法是在组中选择一个其他按钮
isSelected()
public class RequiredToggleButton extends ToggleButton {
@Override
public void fire() {
if (!isDisabled() && !isSelected()) {
setSelected(!isSelected());
fireEvent(new ActionEvent());
}
}
}