Indexing JavaFX检查特定单元格的单元格背景(随机访问)
我刚刚开始开发JavaFX应用程序。也许我不明白JavaFX是如何使用TableView的,我应该使用一些不同的东西 当前,我的TableView在双击单元格时以多列形式显示数据,背景颜色会发生变化(通过setCellFactory(customFactory)) 现在我想通过使用索引(列、行)和检查背景色来访问表的不同单元格。 背景颜色已更改的单元格应在单击某个按钮后存储 我想为每一行获取背景已更改的每个单元格(获取celltext),并将其存储在数据结构(如Map>)中供以后使用Indexing JavaFX检查特定单元格的单元格背景(随机访问),indexing,javafx,tableview,cell,Indexing,Javafx,Tableview,Cell,我刚刚开始开发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);
我添加了一个代码示例,它有帮助吗?否则我真的不知道你的意思。在这种情况下,请在你的问题中发布你的代码。