在JavaFX TableView中,如何基于某些按钮单击事件来更改复选框行的颜色

时间:2018-08-30 13:38:05

标签: java javafx

我有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

1 个答案:

答案 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();
                }
            }));