我正在创建一个具有TableView内容的应用程序,我想将每个选定的行单元格数据选择到TextFields中。我从这个问题开始:Getting selected item from a JavaFX TableViewAsk
但我只能得到这些数据的第一列。我的问题是如何才能获得第二和第三列?这是我的代码:
table.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue observableValue, Object oldValue, Object newValue) {
if (table.getSelectionModel().getSelectedItem() != null) {
TableViewSelectionModel selectionModel = table.getSelectionModel();
ObservableList selectedItem = selectionModel.getSelectedCells();
TablePosition getName = (TablePosition) selectedItem.get(0);
Object val1 = getName.getTableColumn().getCellData(newValue);
name.setText("" + val1);
}
}
});
答案 0 :(得分:1)
当选择模型设置为单选时,使用选定的项属性,因此您可以定义rowFactory。
Object cellItem = cell.getTableRow().getItem();
这将为你提供表格的行项目。所以你可以这样做
我希望以下代码能为您效劳。
table.setRowFactory(tv -> {
TableRow<DataType> row = new TableRow<>();
row.setOnMouseClicked(event -> {
if (!row.isEmpty()) {
DataType clickedRow = row.getItem();
TableViewSelectionModel selectionModel = table.getSelectionModel();
ObservableList selectedItem = selectionModel.getSelectedCells();
TablePosition getName = (TablePosition) selectedItem.get(0);
Object val1 = getName.getTableColumn().getCellData(clickedRow);
name.setText("" + val1);
System.out.println("selected :" + val1);
}
});
return row;
});
答案 1 :(得分:0)
侦听器方法中的newItem
是表示表中整行的对象。
只需正确键入更改侦听器,然后您就可以访问该行中的所有数据。即假设你定义了
TableView<T> table ;
对于某些类T
,然后使用以下内容(将T
替换为您在表视图中使用的任何类):
table.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<T>() {
@Override
public void changed(ObservableValue<? extends T> observableValue, T oldValue, T newValue) {
// now just call methods on newValue to get the data you need...
}
});
答案 2 :(得分:0)
只需使用以下代码:
重要提示:请注意,此方法应在 TableView 的“On Mouse Clicked”事件中实现,请查看下图以供参考:
Integer index = -1;
@FXML
private void showRowDataInTextFields()
{
index = tableViewName.getSelectionModel().getSelectedIndex();
if (index <= -1)
{
return;
}
textBoxName.setText(column_Name.getCellData(index)); // used for columns which has only strings
textBoxNameWithNumber.setText(column_Name.getCellData(index).toString()); // use this one for columns which contains numbers
}
编辑:代码改进