RadioButton
円のないカスタムを作成する必要があります。を拡張Label
して実装する非常に単純なクラスですToggle
。マウスクリックハンドラーを追加しました:
private class MouseClickedHandler implements EventHandler<MouseEvent> {
@Override
public void handle(MouseEvent t) {
final Toggle toggle = (Toggle) t.getSource();
if (!toggle.isSelected()) {
getToggleGroup().selectToggle(toggle);
}
}
}
私の問題は、デフォルトで選択されたラジオボタンを設定することです。作成後に に追加した後RadioButton
に呼び出す場合、グループ内の他のラジオ ボタンをクリックしてアプリケーションを起動すると、はデフォルトのものを除いて選択を解除します。setSelected(true) を直接呼び出したラジオ ボタンと、現在クリックで選択されているラジオ ボタンの 2 つが常に選択された状態になります。setSelected(true)
ToggleGroup
ToggleGroup
私はそれを修正しました - 完全なコード:
public class RadioBtn extends Label implements Toggle {
private ObjectProperty<ToggleGroup> toggleGroup = null;
private BooleanProperty selectedProperty = null;
public RadioBtn {
initHandlers();
}
@Override
public ToggleGroup getToggleGroup() {
return toggleGroupProperty().get();
}
@Override
public void setToggleGroup(ToggleGroup tg) {
if (getToggleGroup() == null) {
toggleGroupProperty().set(tg);
}
getToggleGroup().getToggles().add(this);
}
@Override
public ObjectProperty<ToggleGroup> toggleGroupProperty() {
if (toggleGroup == null) {
toggleGroup = new SimpleObjectProperty<>();
}
return toggleGroup;
}
@Override
public boolean isSelected() {
return selectedProperty().get();
}
@Override
public void setSelected(boolean bln) {
selectedProperty().set(bln);
}
@Override
public BooleanProperty selectedProperty() {
if (selectedProperty == null) {
selectedProperty = new SimpleBooleanProperty();
}
return selectedProperty;
}
protected void initHandlers() {
if (getToggleGroup() != null) {
setOnMouseClicked(new ToggleGroupHandler());
}
}
private class ToggleGroupHandler implements EventHandler<MouseEvent> {
@Override
public void handle(MouseEvent t) {
final Toggle toggle = (Toggle) t.getSource();
if (!toggle.isSelected()) {
/*if(getToggleGroup().getSelectedToggle() != null) {
getToggleGroup().getSelectedToggle().setSelected(false);
}*/
getToggleGroup().selectToggle(toggle);
}
}
}
}