gpt4 book ai didi

JavaFX 2 - Tableview 复选框不显示值

转载 作者:行者123 更新时间:2023-12-01 10:02:12 25 4
gpt4 key购买 nike

我终于成功地跟踪了 GUI 中复选框的点击情况。但现在它不会将 CheckBox 的正确值加载到 gui 中。谁能看出可能出了什么问题吗? :)

roadtrainCol.setCellValueFactory(
new Callback<CellDataFeatures<Spot,Boolean>,ObservableValue<Boolean>>()
{
public ObservableValue<Boolean> call(CellDataFeatures<Spot, Boolean> param) {
return param.getValue().getRoadtrain();
}
});
roadtrainCol.setCellFactory(col -> {
CheckBoxTableCell<Spot, Boolean> cell = new CheckBoxTableCell<>(index -> {
BooleanProperty active = new SimpleBooleanProperty();
active.addListener((obs, wasActive, isNowActive) -> {
System.out.println("del");
rettedeSpots(tableViewId.getItems().get(index).getId());
});
return active ;
});
return cell ;
});

最佳答案

您正在创建 BooleanProperty s。这些属性将始终使用 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 属性的命名约定:

  • 属性 getter 名为 <propertyName>Property (不是get<capitalFirstLetterPropertyName>)
  • 属性值的 getter 名为 get<capitalFirstLetterPropertyName>
  • 属性值的 setter 名为 set<capitalFirstLetterPropertyName>

关于JavaFX 2 - Tableview 复选框不显示值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36711535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com