我有一个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(),但后来我出了边界异常,我在某处读到了我无法在同一个监听器中更改表模型。有小费吗?
谢谢。
答案 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();
}
});