JavaFX:TableView-将选定项列值(字符串)获取到文本字段中

JavaFX:TableView-将选定项列值(字符串)获取到文本字段中,javafx,Javafx,我正在制作一个包含TableView内容的应用程序,我想将每个选定的行单元格数据选择到文本字段中。我从这个问题开始: 但我只能得到这些数据的第一列。我的问题是,我怎样才能得到第二和第三列呢?这是我的密码: table.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue o

我正在制作一个包含TableView内容的应用程序,我想将每个选定的行单元格数据选择到文本字段中。我从这个问题开始:

但我只能得到这些数据的第一列。我的问题是,我怎样才能得到第二和第三列呢?这是我的密码:

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);
            }
        }
    });

当选择模型设置为单选时,将使用“选定项”属性,因此可以定义行工厂

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;
});
table.setRowFactory(电视->{
TableRow行=新TableRow();
row.setOnMouseClicked(事件->{
如果(!row.isEmpty()){
数据类型clickedRow=row.getItem();
TableViewSelectionModel selectionModel=table.getSelectionModel();
ObservableList selectedItem=selectionModel.getSelectedCells();
TablePosition getName=(TablePosition)selectedItem.get(0);
Object val1=getName.getTableColumn().getCellData(单击显示);
name.setText(“+val1”);
System.out.println(“所选:“+val1”);
}
});
返回行;
});

侦听器方法中的
newItem
是表示表中整行的对象

只要正确地键入change listener,就可以访问该行中的所有数据。也就是说,假设你定义了

TableView<T> table ;

只需使用以下代码:

重要提示:请注意,此方法应在TableView的“鼠标点击”事件中实现,请查看下图以供参考:

整数索引=-1;
@FXML
私有void showRowDataInTextFields()
{
index=tableViewName.getSelectionModel().getSelectedIndex();
如果(索引)
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...
    }
});
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
    }