无法在tableview JavaFx的同一行中选择不同的单元格

时间:2016-03-18 13:23:35

标签: javafx

我有一个TableView,我需要启用任何单元格的选择(一次一个)。现在,我使用这段代码:

        tableView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue observableValue, Object oldValue, Object newValue) {
            if(tableView.getSelectionModel().getSelectedItem() != null)
            {
                TableView.TableViewSelectionModel selectionModel = tableView.getSelectionModel();
                ObservableList selectedCells = selectionModel.getSelectedCells();
                TablePosition tablePosition = (TablePosition) selectedCells.get(0);
                String val = (String)tablePosition.getTableColumn().getCellData(newValue);
                System.out.println("Selected Value: " + val);
                selectionTextField.appendText(val);
            }
        }
    });

问题是,我无法在同一行中获取不同单元格的值。我认为这是因为它是同一行,选择监听器不会被触发。我尝试了clearSelection(),但后来我出了边界异常,我在某处读到了我无法在同一个监听器中更改表模型。有小费吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您使用单元格选择而不是行选择(换句话说,如果您已调用tableView.getSelectionMode().setCellSelectionEnabled(true);),那么您应该观察所选单元格的列表而不是selectedItem属性。 selectedItem属性仅指示所选行,因此只有在您选择新行时才会更改。

ObservableList<TablePosition> selectedCells = table.getSelectionModel().getSelectedCells() ;
selectedCells.addListener((ListChangeListener.Change<? extends TablePosition> change) -> {
    if (selectedCells.size() > 0) {
        TablePosition selectedCell = selectedCells.get(0);
        TableColumn column = selectedCell.getTableColumn();
        int rowIndex = selectedCell.getRow();
        Object data = column.getCellObservableValue(rowIndex).getValue();
    }
});