我终于设法在我的GUI中的复选框上发生单击时进行跟踪。但是现在它不会将CheckBox的正确值加载到gui中。任何人都可以看到可能出错的地方? :)
sourceSets
答案 0 :(得分:1)
您正在创建新 BooleanProperty
。这些属性将始终使用false
进行初始化。
cellFactory
不是添加侦听器的地方。而是将侦听器添加到项目中。
roadtrainCol.setCellValueFactory(
new Callback<CellDataFeatures<Spot, Boolean>, ObservableValue<Boolean>>() {
public ObservableValue<Boolean> call(CellDataFeatures<Spot, Boolean> param) {
return param.getValue().getRoadtrain();
}
});
roadtrainCol.setCellFactory(CheckBoxTableCell.forTableColumn(roadtrainCol));
ChangeListener<Boolean> roadTrainChangeListener = (observable, oldValue, newValue) -> {
Spot spot = (Spot) ((ReadOnlyProperty) observable).getBean();
System.out.println("del");
rettedeSpots(spot.getId());
};
// add/remove listeners when Spots are added to/removed from the list
tableViewId.getItems().addListener((ListChangeListener.Change<? extends Spot> c) -> {
while (c.next()) {
for (Spot s : c.getRemoved()) {
s.getRoadtrain().removeListener(roadTrainChangeListener);
}
for (Spot s : c.getAddedSubList()) {
s.getRoadtrain().addListener(roadTrainChangeListener);
}
}
});
// add listeners to items already in the list
for (Spot s : tableViewId.getItems()) {
s.getRoadtrain().addListener(roadTrainChangeListener);
}
请注意,只有将Spot
个SimpleBooleanProperty
实例分配为bean
时才会有效,例如
Spot() {
this.roadtrain = new SimpleBooleanProperty(this, "roadtrain");
}
或
Spot(boolean roadtrain) {
this.roadtrain = new SimpleBooleanProperty(this, "roadtrain", roadtrain);
}
我刚使用bean
来避免为每个项目创建新的侦听器。
还要考虑遵循JavaFX属性的命名约定:
<propertyName>Property
(不是get<capitalFirstLetterPropertyName>
)get<capitalFirstLetterPropertyName>
set<capitalFirstLetterPropertyName>