自定义属性fxml

时间:2013-09-14 15:22:35

标签: javafx fxml

我正在尝试简化我正在编写的选项应用程序的标记,并决定使用自定义属性为某些JavaFX组件创建子类。 显然,这样做的方法是为我的界面中的属性提供getter和setter:

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>

但这不起作用,告诉我两个属性都是只读的。

我找到了一些例子,其中setter将Objects作为参数并尝试了,但无济于事。帮助将不胜感激。

编辑:自从被问及,这是一个实施者:

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

1 个答案:

答案 0 :(得分:0)

问题解决了(某种程度上)

在尝试了一些事情之后,我做了另一个干净的项目,现在它正确执行。

IntelliJ IDEA仍然抱怨这些属性是只读的,经过一些挖掘后,这似乎是注释检查器的一个问题。