Indexing JavaFX检查特定单元格的单元格背景(随机访问)

Indexing JavaFX检查特定单元格的单元格背景(随机访问),indexing,javafx,tableview,cell,Indexing,Javafx,Tableview,Cell,我刚刚开始开发JavaFX应用程序。也许我不明白JavaFX是如何使用TableView的,我应该使用一些不同的东西 当前,我的TableView在双击单元格时以多列形式显示数据,背景颜色会发生变化(通过setCellFactory(customFactory)) 现在我想通过使用索引(列、行)和检查背景色来访问表的不同单元格。 背景颜色已更改的单元格应在单击某个按钮后存储 我想为每一行获取背景已更改的每个单元格(获取celltext),并将其存储在数据结构(如Map>)中供以后使用 如果有人能

我刚刚开始开发JavaFX应用程序。也许我不明白JavaFX是如何使用TableView的,我应该使用一些不同的东西

当前,我的TableView在双击单元格时以多列形式显示数据,背景颜色会发生变化(通过setCellFactory(customFactory))

现在我想通过使用索引(列、行)和检查背景色来访问表的不同单元格。 背景颜色已更改的单元格应在单击某个按钮后存储

我想为每一行获取背景已更改的每个单元格(获取celltext),并将其存储在数据结构(如Map>)中供以后使用


如果有人能给我一个提示,那就太好了。谢谢您的帮助。

我想您正在向TableCell添加一个EventHandler,它由customFactory返回。此EventHandler正在处理双击事件并设置背景色,对吗? 此处理程序可以访问传递给Callbacks/CustomFactories调用方法的参数,该方法包含当前行的模型bean。当doubleClickEvent发生时,可以在该模型bean中设置标志或列名

然后

点击某个按钮后

您可以通过检查表项来获取信息。每个项目的行索引相当于
TableView\getItems

如果您需要更多的TableFunction,也可以查看一下

已编辑

这是一个代码示例:

TableView中使用的模型Bean:

class Model {
  private String propertyA;
  private String propertyB;
  @lombok.Getter
  private Set<String> propertiesClicked = new HashSet<>();
类模型{
私有字符串属性a;
私有字符串属性b;
@龙目格特
private Set propertiesClicked=new HashSet();
javafx控件,如果使用FXMLs,请使用@FXML注释它们:

  private TableView<Model> tableView;
  private TableColumn<Model, String> propertyAColumn;
  private TableColumn<Model, String> propertyBColumn;
private TableView TableView;
私有TableColumn属性列;
私有TableColumn PropertyByColumn;
和CellFactory。如果需要为多个列创建更通用的CellFactory:

propertyAColumn.setCellFactory((value) -> {

  TableCell<Model, String> tableCell = new TableCell<Model, String>() {
    //Override the Methods which you need
  };
  tableCell.setOnMouseClicked((mouseEvent) -> {
    if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
      if (mouseEvent.getClickCount() == 2 && !tableCell.getStyleClass().contains("buttonClicked")) {
        tableCell.getStyleClass().add("buttonClicked");
        tableView.getSelectionModel().getSelectedItem().getPropertiesClicked().add("propertyA");
      }
    }
  });
  return tableCell;
});
propertyAColumn.setCellFactory((值)->{
TableCell TableCell=新的TableCell(){
//重写所需的方法
};
tableCell.setOnMouseClicked((MouseeEvent)->{
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
如果(mouseEvent.getClickCount()==2&&!tableCell.getStyleClass()包含(“按钮单击”)){
tableCell.getStyleClass().add(“buttonClicked”);
tableView.getSelectionModel().getSelectedItem().getPropertiesClicked().add(“propertyA”);
}
}
});
返回表单元;
});

谢谢您的帮助。我认为TableView实际上是我想要使用的正确控件。但是现在如何访问兄弟单元格有点复杂:
TableRow row=cell.getTableRow();int rowIndex=row.getIndex();GameStub game=(GameStub)row.getTableView().getItems().get(rowIndex);
我添加了一个代码示例,它有帮助吗?否则我真的不知道你的意思。在这种情况下,请在你的问题中发布你的代码。