如何选择行的TableCell节点

时间:2014-11-27 15:04:13

标签: javafx tableview

每当用户选择一行时,我都会使用以下代码。有没有什么方法可以从所选行中获取第一个或所选单元格?我需要选定的单元格,因为我希望将该节点传递给ControlsFX POPOVER.show()方法。我需要popover box显示在tableview中所选行的正上方。

 tableView.setRowFactory(tv -> {

            TableRow<ObservableList> row = new TableRow<>();

            row.setOnMouseClicked(event -> {
                if (event.getClickCount() == 2 && (!row.isEmpty())) {
                 popover.show(cellNodeHere<-);
                }
            });

            return row;

        });
    }

2 个答案:

答案 0 :(得分:1)

在上一个问题中,只需将行工厂更改为此。您可以使用getCellData

    Label label = new Label("click a row");
    tableView.setRowFactory(tv -> {
        TableRow<ObservableList> row = new TableRow<>();    
        row.setOnMouseClicked(event -> {
            if (event.getClickCount() == 2 && (!row.isEmpty())) {
                //if you want the y coord of the row in the scene
                double y = ((TableRow)event.getSource()).getLocalToSceneTransform().getTy();
                int idx = tableView.getSelectionModel().getSelectedIndex();
                label.setText(idx
                        + " <-tbl row, idx in items-> "
                        + items.indexOf(tableView.getSelectionModel().getSelectedItem())
                        + ", first cell-> "+((TableColumn)tableView.getColumns().get(0)).getCellData(idx));
            }
        });
        return row;
    });

答案 1 :(得分:1)

我的解决方案是将行用作节点并转动箭头位置

        popup.setArrowLocation(PopOver.ArrowLocation.BOTTOM_CENTER);

这样,弹出窗口就会显示在TableRow

上方