0

私が書いているオプション アプリケーションのマークアップを単純化しようとしていたところ、いくつかの JavaFX コンポーネントをカスタム属性でサブクラス化することにしました。どうやらこれを行う方法は、私のインターフェイスのように、属性にゲッターとセッターを提供することです。

public interface ConfigNode {
    public String getSection();
    public void setSection(String section);

    public String getKey();
    public void setKey(String key);

    public Wini getConfig();
    public void setConfig(Wini config);
}

対応する fxml コード:

<GridPane fx:id="root" xmlns:fx="http://javafx.com/fxml" fx:controller="org.syntax_austria.league_config.OptionController" disable="true">
    <ResolutionBox />
    <QualityBox section="Performance" key="ShadowsEnabled" />
</GridPane>

ただし、これは機能せず、両方の属性が読み取り専用であることがわかります。

セッターがオブジェクトをパラメーターとして取り、それを試した例をいくつか見つけましたが、役に立ちませんでした。助けていただければ幸いです。

編集:尋ねられたので、ここに1人の実装者があります:

public class ModeBox<T> extends ChoiceBox<T> implements ConfigNode {
    String section;
    String key;
    Wini config;

    @Override
    public String getSection() {
        return section;
    }

    @Override
    public void setSection(String section) {
        if(section instanceof String)
            this.section = (String)section;
    }

    @Override
    public String getKey() {
        return key;
    }

    @Override
    public void setKey(String key) {
        if(key instanceof String)
            this.key = (String)key;
    }

    @Override
    public Wini getConfig() {
        return config;
    }

    @Override
    public void setConfig(Wini config) {
        this.config = config;
        getSelectionModel().select(config.get(section, key, Integer.class));
        getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
                getConfig().put(section, key, number2.intValue());
            }
        });
    }
}

そしてそれを拡張するQualityBox:

public class QualityBox extends ModeBox<String> {
    public QualityBox() {
        setItems(FXCollections.observableArrayList("Very Low", "Low", "Medium", "High", "Very High"));
    }
}
4

1 に答える 1

0

質問は自然に解決しました(一種)

いくつかのことを試した後、プロジェクトをもう一度クリーンアップしたところ、適切に実行されるようになりました。

IntelliJ IDEA は、プロパティが読み取り専用であることにまだ不満を持っており、少し掘り下げた後、これは注釈インスペクターに問題があるようです。

于 2013-09-15T19:38:14.383 に答える