【问题标题】:Custom attributes fxml自定义属性 fxml
【发布时间】:2013-09-14 15:22:34
【问题描述】:

我试图简化我正在编写的选项应用程序的标记,并决定使用自定义属性对一些 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 将对象作为参数并尝试过,但无济于事。帮助将不胜感激。

编辑:既然被问到,这里有一个实施者:

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

【问题讨论】:

  • 子类化在哪里?显示实施者之一; ResolutionBox 或 QualityBox,如果它们相似的话。
  • 首先,感谢您的回答。相应地更新了问题。不过,这似乎主要是 IDE 的问题。
  • 没关系:)。您可以随时在下面回答您自己的问题并将其标记为已回答。您还可以尝试将 Netbeans 作为 JavaFX 的 IDE。至少对其进行测试或演示。它对 JavaFX 的支持在最新版本中得到了显着改进。和平!

标签: javafx fxml


【解决方案1】:

问题自己解决了(有点)

在尝试了一些事情之后,我又clean了我的项目,现在它可以正常执行了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2016-01-23
    • 2011-03-27
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多