每行包含三个RGB值的单元格。我使用这些RGB值来设置同一行中另一个单元格的背景。在需要背景颜色的单元格上,我有一个回调函数,可以获取RGB值并完美地设置背景。所以整个TableView
看起来就像我需要的那样。我有一个颜色选择器,这个选择器需要更新包含三个RGB值的选定行。我能够设置新的三个RGB值,但我还需要具有彩色背景的单元格将其自身更新为新的RGB值。在下面的代码中,我找到了一种方法来做到这一点,但我相信这是相当丑陋的。
@FXML void handleColorPicker(ActionEvent event)
{
int r = (int) (comColorPicker.getValue().getRed()*255);
int g = (int) (comColorPicker.getValue().getGreen()*255);
int b = (int) (comColorPicker.getValue().getBlue()*255);
ComTableView.getSelectionModel().getSelectedItem().setRCom(r);
ComTableView.getSelectionModel().getSelectedItem().setGCom(g);
ComTableView.getSelectionModel().getSelectedItem().setBCom(b);
// we need to kick the cell value so it updates also the background color so we clear and rewrite the text string
String currentName = ComTableView.getSelectionModel().getSelectedItem().getCommodityName();
ComTableView.getSelectionModel().getSelectedItem().setCommodityName(" ");
ComTableView.getSelectionModel().getSelectedItem().setCommodityName(currentName);
}
上面代码的最后三行触发了单元格updateItem
,但我想我是以丑陋的方式做这件事。我想知道,有没有更好的方法呢?
答案 0 :(得分:0)
有两种方法可以做到这一点:
如果您要沿着路线2前进: 让我们假设表中的数据类是ColorData`并具有三个属性:
int RCom
int GCom
int BCom
String CommodityName
现在,如果您将CommodityName
从String
更改为StringProperty
,并通过<{p}>将其提供给TableView
commodityNameColumn.setCellValueFactory(cellData -> cellData.getValue().commodityNameProperty());
其中commodityNameColumn
是TableView的TableColumn,显示commodityNameProperty()
ColorData
的新方法,可以访问新的StringProperty。
现在,如果您通过其setter更改StringProperty,并且值实际更改,则TableCell将相应地更新。
如果仍然不清楚如何将数据类链接到JavaFX TableView,我建议this tutorial。