【发布时间】: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 的支持在最新版本中得到了显着改进。和平!