0

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)ToggleGroupToggleGroup

私はそれを修正しました - 完全なコード:

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


}
4

0 に答える 0