我有JavaFX TableView,我在其中将一列设置为CheckBoxTableCell,并且我想基于某个按钮单击事件来更改该单元格的背景颜色,以便在代码的另一个UI中显示的颜色是以及该单元格的背景颜色。
我已经实现了CheckBoxTableCell列,如下所示-
dtlsTableViewDisplayChannelColumn.setCellValueFactory(cellData -> cellData.getValue().isChecked());
dtlsTableViewDisplayChannelColumn
.setCellFactory(CheckBoxTableCell.forTableColumn(new Callback<Integer, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(Integer param) {
logger.info("AID " + observableDataList.get(param).getAid() + " changed value to "
+ observableDataList.get(param).isChecked());
if (observableDataList.get(param).isChecked().get()) {
aidSet.add(observableDataList.get(param).getAid());
} else {
aidSet.remove(observableDataList.get(param).getAid());
}
return observableDataList.get(param).isChecked();
}
}));
它在UI中显示如下: CheckBox in UI with Visualize button
因此,当单击“可视化”按钮时,选中的CheckBox单元格的背景色应更改为提供的颜色值。
请在下面的图片中找到预期的输出- CheckBox in UI with background color of checked CheckBox cell changed after clicking on 'Visualize' button
答案 0 :(得分:0)
我认为这就是您要寻找的...我要假装我了解您的代码并向您显示编辑的位置:
dtlsTableViewDisplayChannelColumn.setCellValueFactory(cellData -> cellData.getValue().isChecked());
dtlsTableViewDisplayChannelColumn
.setCellFactory(CheckBoxTableCell.forTableColumn(new Callback<Integer, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(Integer param) {
logger.info("AID " + observableDataList.get(param).getAid() + " changed value to "
+ observableDataList.get(param).isChecked());
if (observableDataList.get(param).isChecked().get()) {
aidSet.add(observableDataList.get(param).getAid());
observableDataList.get(param).setStyle("-fx-background-color: red;"); //<--- This changes the color of the specific checkbox
//Note: I assume "param" calls the specific checkbox in the checkbox list "observableDataList"
} else {
aidSet.remove(observableDataList.get(param).getAid());
}
return observableDataList.get(param).isChecked();
}
}));