Java 触发TableView的更新';s单元格的值,而不更改该值
每行包含三个具有RGB值的单元格。我使用这些RGB值设置同一行中另一个单元格的背景。在需要背景颜色的单元格上,我有一个回调函数,它可以拾取RGB值并完美地设置背景。所以整个Java 触发TableView的更新';s单元格的值,而不更改该值,java,user-interface,javafx,tableview,Java,User Interface,Javafx,Tableview,每行包含三个具有RGB值的单元格。我使用这些RGB值设置同一行中另一个单元格的背景。在需要背景颜色的单元格上,我有一个回调函数,它可以拾取RGB值并完美地设置背景。所以整个TableView看起来完全符合我的需要。我有一个颜色选择器,该选择器需要更新包含三个RGB值的选定行。我可以设置新的三个RGB值,但我还需要有彩色背景的单元格将自身更新为新的RGB值。在下面的代码中,我找到了一种方法来做到这一点,但我相信这是相当丑陋的 @FXML void handleColorPicker(ActionE
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
,但我认为我这样做的方式很糟糕。我想知道,有没有更好的方法呢?有两种方法:
如果您要走2号公路: 假设表中的数据类为ColorData`并具有三个属性:
int-RCom
int-GCom
int BCom
String CommodityName
CommodityName
从String
更改为StringProperty
,并通过
commodityNameColumn.setCellValueFactory(cellData -> cellData.getValue().commodityNameProperty());
其中,commodityNameColumn
是TableView的TableColumn,它显示了commodityNameProperty()
一种新的方法ColorData
来访问新的StringProperty
现在,如果您通过其setter更改StringProperty,并且值实际发生了更改,TableCell将相应地更新
如果仍然不清楚如何将数据类链接到JavaFXTableView,我推荐