Как установить отдельную подсказку / свойство привязки ячейки к подсказке для TableColumn в JavaFX - PullRequest
1 голос
/ 18 марта 2020

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

Как и на показанном изображении, я отображаю «тип» и хочу, чтобы пользователь мог навести курсор на отдельную ячейку «тип», чтобы просмотреть строку «подтип» в качестве всплывающей подсказки. (Как и на рисунке, но я хочу, чтобы это отображало фактический тип, а не фиктивную строку.) Оба определены в интерфейсе IDisplayLayer.

Мне нужно отобразить специфицированный c subtypeProperty во всплывающей подсказке, вместо строки. Этот подтип должен быть связан так, как обычные PropertyValueFactory связывают данные. Как я могу связать это? Заранее спасибо за любую помощь / руководство.

image showing tooltip that needs to display

        TableColumn<IDisplayLayer, String> type = new TableColumn<>("Type");
        PropertyValueFactory<IDisplayLayer, String> pvf2 = new PropertyValueFactory<IDisplayLayer, String>("layerType");

        type.setCellFactory
        (
          column ->
           {
             return new TableCell<IDisplayLayer, String>()
              {
                @Override
                protected void updateItem(String item, boolean empty)
                 {
                    Tooltip tip = new Tooltip("This is a tooltip"); //where I need to set the value here
                    super.updateItem(item, empty);
                    setText(item);
                    setTooltip(tip);
                 }
              };
           });

Где определены оба: publi c interface IDisplayLayer {

String getLayerType();
void setLayerType(String s);
StringProperty layerTypeProperty();

String getLayerSubtype();
void setLayerSubtype(String s);
StringProperty layerSubtypeProperty();

}

1 Ответ

1 голос
/ 18 марта 2020

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

TableColumn<IDisplayLayer, IDisplayLayer> type = new TableColumn<>("Type");
type.setCellValueFactory(cellData -> new SimpleObjectProperty<>(cellData.getValue()));
type.setCellFactory(col -> new TableCell<>() {
    private final Tooltip tooltip = new Tooltip();

    @Override
    protected void updateItem(IDisplayLayer row, boolean empty) {
        super.updateItem(row, empty);
        textProperty().unbind();
        tooltip.textProperty().unbind();
        if (row == null || empty) {
            setText(null);
            setTooltip(null);
        } else {
            textProperty().bind(row.layerTypeProperty());
            tooltip.textProperty().bind(row.layerSubtypeProperty());
            setTooltip(tooltip);
        }
    }
});
...