JavaFX:TableView - 将选定的Item列值(String)输入TextFields

时间:2017-05-17 06:56:32

标签: javafx

我正在创建一个具有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);
            }
        }
    });

3 个答案:

答案 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”事件中实现,请查看下图以供参考:

enter image description here

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
    }

编辑:代码改进