我正在尝试简化我正在编写的选项应用程序的标记,并决定使用自定义属性为某些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"));
}
}
答案 0 :(得分:0)
在尝试了一些事情之后,我做了另一个干净的项目,现在它正确执行。
IntelliJ IDEA仍然抱怨这些属性是只读的,经过一些挖掘后,这似乎是注释检查器的一个问题。