我有一个表格视图,我需要在其中启用任何单元格的选择(一次一个)。现在,我使用以下代码:
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(),但后来我得到了越界异常,我在某处读到我无法在同一侦听器中更改表模型。有什么提示吗?
谢谢。
如果使用单元格选择而不是行选择(换句话说,如果您调用了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();
}
});