javafx: отобразить гиперссылку в столбце и открыть новое окно - PullRequest
0 голосов
/ 01 июня 2018

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

1 Ответ

0 голосов
/ 01 июня 2018

Вам нужно реализовать пользовательский тип ячейки, чтобы сделать это:

public class HyperlinkTableCell<S, T> extends TableCell<S, T> {

    private final Hyperlink link;
    private final Set<T> visitedLinks;
    private final Function<? super T, String> converter;

    private HyperlinkTableCell(Set<T> visitedLinks, final Consumer<? super T> handler, Function<? super T, String> converter) {
        link = new Hyperlink();
        if (handler != null) {
            link.setOnAction(evt -> {
                T item = getItem();
                handler.accept(item);

                // keep track of visited links
                visitedLinks.add(item);
            });
        }
        this.visitedLinks = visitedLinks;
        this.converter = converter;
    }

    @Override
    protected void updateItem(T item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            setGraphic(null);
        } else {
            setGraphic(link);
            link.setText(converter.apply(item));

            // restore visited state
            link.setVisited(visitedLinks.contains(item));
        }
    }

    public static <U, V> Callback<TableColumn<U, V>, TableCell<U, V>> forTableColumn(
            final Consumer<? super V> handler,
            final Function<? super V, String> converter) {
        final Set<V> set = new HashSet<>();
        return c -> new HyperlinkTableCell<>(set, handler, converter);
    }

    public static <U, V> Callback<TableColumn<U, V>, TableCell<U, V>> forTableColumn(
            final Consumer<? super V> handler) {
        return forTableColumn(handler, item -> item == null ? "" : item.toString());
    }

}

Использование

column.setCellFactory(HyperlinkTableCell.forTableColumn(item -> {
    Alert alert = new Alert(Alert.AlertType.INFORMATION);
    alert.setContentText("You clicked " + item);
    alert.show();
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...