TableView getSelectedIndex返回异常值

时间:2015-08-18 17:10:26

标签: java javafx-8

我在Scene Builder中创建了一个JavaFX窗口,其中包含2个活动按钮和一个存储商品项目的TableView。商品是由2个相同类别的产品和服务实现的接口。相关代码:

@FXML
private TableView<Commodity> commoditiesTable;

commoditiesTable.setOnMouseClicked((MouseEvent event) -> {
            int selectedIndex = commoditiesTable.getSelectionModel().getSelectedIndex();
            commoditiesTable.getItems().stream().forEach((c) -> {
                System.out.println(c.getName());
            });
            System.out.println(selectedIndex);
});

@FXML
//Button
private void setTableViewProducts() {
    commoditiesTable.setItems(DataSupplier.getProducts());
    System.out.println("Products");
}

@FXML
//Button
private void setTableViewServices() {
    commoditiesTable.setItems(DataSupplier.getServices());
    System.out.println("Services");
}

DataSupplier返回一个ObservableList,其中包含Id和name字段两种方法中的2个元素。 触发&#34; setOnMouseClicked&#34;按预期工作,直到通过其他类更新TableView&#39;按钮,此时

commoditiesTable.getSelectionModel().getSelectedIndex();

开始返回-1。

点击产品按钮并选择第一个元素,重复,然后再次点击服务和产品,从此代码片段输出:

Products
product1
product2
0
Products
product1
product2
0
Services
service1
service2
-1
Products
product1
product2
-1

如果在切换到Products之前选择除first之外的元素或以Services开头,则行为是相同的。

1 个答案:

答案 0 :(得分:0)

生成了错误的值,因为commoditiesTable.getSelectionModel()仍然指向旧的ObservableList,即使表中的视觉突出显示了正确的元素。在表格上调用getSelectionModel().clearSelection()后,getSelectedIndex()会返回正确的值。