0

我在这里自定义了一个超链接单元格。我希望tableview在单击此链接时选择内容,但是在添加超链接后,tableview的选择似乎无效。

        tb_uGoodUrl.setCellFactory(new Callback<TableColumn<GoodModel, String>, TableCell<GoodModel, String>>() {
        @Override
        public TableCell<GoodModel, String> call(TableColumn<GoodModel, String> param) {
            TableCell<GoodModel, String> cell = new TableCell<GoodModel, String>() {
                private final Hyperlink hyperlink = new Hyperlink();
                {
                    hyperlink.setOnMouseClicked(event -> {
                        if(event.getClickCount()  == 2){
                            String url = getItem();
                            hostServices.showDocument(url);
                        }
                    });
                }

                @Override
                protected void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);
                    if (empty) {
                        setGraphic(null);
                    }else {
                        hyperlink.setText(getItem());
                        setGraphic(hyperlink);
                    }
                }
            };
            return cell;
        }
    });

点击链接,未选中单元格

如果未选中单元格,使用以下代码时会报空异常。

                TablePosition pos = tableView.getSelectionModel().getSelectedCells().get(0);
            int row = pos.getRow();
            // Item here is the table view type:
            GoodModel item = tableView.getItems().get(row);
            TableColumn col = pos.getTableColumn();
            // this gives the value in the selected cell:
            String data = (String) col.getCellObservableValue(item).getValue();

你想要达到的效果如下

渲染

4

1 回答 1

0

单击时,您可以使用表格的选择模型手动选择单元格Hyperlink

// Assuming this code is inside a TableCell implementation
hyperlink.setOnAction(event -> {
    event.consume();
    getTableView().getSelectionModel().select(getIndex(), getTableColumn());
    // show your document
});

我使用了单击一次onAction时将触发的属性。这是超链接的典型行为,但如果您只想在双击时执行该操作,那么您可以继续使用您的处理程序。HyperlinkonMouseClicked

注意上面没有考虑多选模式。

于 2019-05-18T21:08:39.213 回答