从 JavaFX TableView 中获取选定项目

Posted

技术标签:

【中文标题】从 JavaFX TableView 中获取选定项目【英文标题】:Getting selected item from a JavaFX TableView 【发布时间】:2013-06-27 15:40:24 【问题描述】:

如何在 JavaFX 中从 TableView 中获取所选项目?

我正在使用

ObservableList selectedItems = taview.getSelectionModel().getSelectedItems();

但这并没有返回我在选择模型中选择的一项。

【问题讨论】:

【参考方案1】:

对于单项选择...

Product p = taview.getSelectionModel().getSelectedItem();
System.out.println(p.getName()); 

对于多项选择...

ArrayList<Product> p = new ArrayList<>(taview.getSelectionModel().getSelectedItems());
for (Product res : p)      
    System.out.println(res.getName());      

【讨论】:

【参考方案2】:

你可以使用这个方法,也许它对你有用

ObservableList rowList = (ObservableList) tblView.getItems().get(getIndex());

对于调用方法会是这样的

String email = rowList.get(1).toString();
String contact = rowList.get(2).toString();
String name= rowList.get(0).toString();

【讨论】:

在你的回答中添加一些描述。【参考方案3】:

你可以像这样从 tableview 获取数据

单项选择

`tableview_obj.getSelectionModel().getSelectedItem().yourgetterobjectname`

和多个项目选择

tableview_obj.getSelectionModel().getSelectedItems().get(indexNo).yourgetterobjectname

【讨论】:

【参考方案4】:

如果你有一个名为 Employee 的 Bean 类。

Employee employee= tblView.getSelectionModel().getSelectedItem();
txtEmployeeName.setText(employee.getName());

【讨论】:

【参考方案5】:

@pranishres

这是我对单元格选择更改侦听器的尝试(即使行没有改变),灵感来自@Java Man 的代码:

tableView.getSelectionModel().setCellSelectionEnabled(true);
ObservableList selectedCells = tableView.getSelectionModel().getSelectedCells();

selectedCells.addListener(new ListChangeListener() 
    @Override
    public void onChanged(Change c) 
        TablePosition tablePosition = (TablePosition) selectedCells.get(0);
        Object val = tablePosition.getTableColumn().getCellData(tablePosition.getRow());
        System.out.println("Selected Value" + val);
    
);

【讨论】:

【参考方案6】:

好的,假设您有一个名为Person 的数据模型类。这样:

Person person = taview.getSelectionModel().getSelectedItem();
System.out.println(person.getName());    

注意TableView 必须将Person 作为类型参数以避免强制转换:

@FXML
private TableView<Person> taview;

TableView<Person> taview = new TableView<>();

当您的行被选中时,您将返回一个Person 实例。然后对那个实例做任何你想做的事情。

【讨论】:

【参考方案7】:
    tableview.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() 
    @Override
    public void changed(ObservableValue observableValue, Object oldValue, Object newValue) 
        //Check whether item is selected and set value of selected item to Label
        if(tableview.getSelectionModel().getSelectedItem() != null) 
            
           TableViewSelectionModel selectionModel = tableview.getSelectionModel();
           ObservableList selectedCells = selectionModel.getSelectedCells();
           TablePosition tablePosition = (TablePosition) selectedCells.get(0);
           Object val = tablePosition.getTableColumn().getCellData(newValue);
           System.out.println("Selected Value" + val);
         
         
     );

使用此代码,您可以从 JAVAFX TABLEVIEW 单元格中获取所选值。

谢谢..

【讨论】:

这段代码对我有用。但它仅在我选择另一行时才有效。即使选择了同一行,每次选择表格单元格时如何运行此代码 有什么方法可以让这个监听器内部的鼠标坐标显示一个弹出菜单之类的东西?

以上是关于从 JavaFX TableView 中获取选定项目的主要内容,如果未能解决你的问题,请参考以下文章

Javafx:TableView根据行列获取特定表格单元格的图形节点

从选定的列表视图项中获取 id

检测 TableView JavaFX 行上的双击

从 TextArea 拖动选定文本时出现 Javafx 问题

使用 tableview (JavaFX) 绑定 hashmap

JavaFX 初始化方法中的 NullPointerException