我有两个ToggleButton,并且我希望它们都绑定到一个Boolean属性,以便当选择一个ToggleButton时,另一个ToggleButton不在,而BooleanProperty为true,反之亦然。
这是我尝试过的。
FXML文件:
<VBox xmlns:fx="http://javafx.com/fxml" fx:controller="my.package.MainController" styleClass="Tool" fx:id="root">
<HBox spacing="10">
<fx:define>
<ToggleGroup fx:id="modeToggleGroup"/>
</fx:define>
<ToggleButton fx:id="manualModeBtn" text="Manual Mode" selected="true" toggleGroup="$modeToggleGroup"/>
<ToggleButton fx:id="automaticModeBtn" text="Automatic Mode" toggleGroup="$modeToggleGroup"/>
</HBox>
<!-- other stuff -->
</VBox>
控制器文件:
public class MainController {
@FXML
private ToggleButton manualModeBtn;
@FXML
private ToggleButton automaticModeBtn;
private BooleanProperty isAutomaticMode;
public void initialize() {
isAutomaticMode = new SimpleBooleanProperty();
automaticModeBtn.selectedProperty.bindBidirectional(isAutomaticMode);
}
}
ToggleGroup确保不会同时选择两个按钮,但是我仍然可以取消选择这两个按钮,但我不希望这样做。
如何将另一个ToggleButton绑定到布尔属性的相反位置(即
not()
)? 最佳答案
您可以使用侦听器来做到这一点:
public class MainController {
@FXML
private ToggleButton manualModeBtn;
@FXML
private ToggleButton automaticModeBtn;
public void initialize() {
manualModeBtn.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> automaticModeBtn.setSelected(! isNowSelected));
automaticModeBtn.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> manualModeBtn.setSelected(! isNowSelected));
}
}
请注意,
RadioButton
几乎已经具有此功能(对于单选按钮,您不能“取消选择”它),因此您可以简单地使用RadioButton
s。请注意this question(如果只是它们外观的一种情况)。