Как изменить выбранное представление таблицы в соответствии с ячейкой представления таблицы - PullRequest
0 голосов
/ 18 мая 2019

Я настроил ячейку гиперссылки здесь.Я хочу, чтобы просмотр таблицы выбирал содержимое при нажатии на эту ссылку, но после добавления гиперссылки выбранный просмотр таблицы кажется недействительным.

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

Эффект, который вы хотите достичь, следующий:

Rendering

1 Ответ

0 голосов
/ 19 мая 2019

Вы можете вручную выбрать ячейку, используя модель выбора таблицы , когда нажата Hyperlink.

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

Я использовал свойство onAction, которое будет запускаться при нажатии *1009* один раз . Это типичное поведение для гиперссылки, но если вы хотите выполнить действие только по двойному щелчку, вы можете продолжать использовать обработчик onMouseClicked.

Обратите внимание, что выше не учитывается режим множественного выбора.

...