Как прослушивать изменения видимых свойств столбца TableView в JavaFX

#javafx #binding #javafx-8

#javafx #привязка #javafx-8

Вопрос:

У меня есть таблица с включенным контекстным меню, позволяющим пользователям скрывать / показывать столбцы. Я хотел бы показать метку, которая указывает, какие столбцы отсутствуют. Я хотел бы выполнить это с помощью StringBinding. Мне интересно, есть ли более простой способ прослушивания изменений, добавляющих видимое свойство каждого столбца в качестве зависимости?

     StringBinding hiddenColumnBinding = Bindings.createStringBinding(() -> {
        String text = "";
        Optional<String> columns = transactionTableView.getColumns()
                                        .stream()
                                       .filter(column -> !column.isVisible())
                                       .map(column -> column.getText())
                                       .reduce((first, second) -> first   ", "   second);
        if(columns.isPresent()){
            text = "Hidden Columns: "   columns.get();
        }
        return text;
    }, WHAT GOES HERE?);
    hiddenColumns.textProperty().bind(hiddenColumnBinding);
  

Спасибо

Ответ №1:

Я нашел, что я могу использовать -transactionTableView.getVisibleLeafColumns()

 StringBinding hiddenColumnBinding = Bindings.createStringBinding(() -> {
    String text = "";
    Optional<String> columns = transactionTableView.getColumns()
                                    .stream()
                                   .filter(column -> !column.isVisible())
                                   .map(column -> column.getText())
                                   .reduce((first, second) -> first   ", "   second);
    if(columns.isPresent()){
        text = "Hidden Columns: "   columns.get();
    }
    return text;
}, transactionTableView.getVisibleLeafColumns());
    hiddenColumns.textProperty().bind(hiddenColumnBinding);
  

Комментарии:

1. Обратите внимание, что вы можете упростить результат привязки к return transactionTableView.getColumns().stream().filter(...).map(...).collect(Collectors.joining(", "); .