JavaFX TableColumn 图形不隐藏

标签 java css javafx tableview visibility

我正在为我的 TableColumns 创建一个自定义标题,它是列的标签加上一个允许用户执行搜索的 TextField。我正在像这样设置列标题:

getColumns().addListener(new ListChangeListener<TableColumn<S, ?>>() {
        @Override
        public void onChanged(final ListChangeListener.Change<? extends TableColumn<S, ?>> change) {
            while (change.next()) {
                Label label;
                TextField search;
                VBox graphic;
                for (TableColumn<S, ?> column : change.getAddedSubList()) {
                    label = new Label(column.getText());
                    search = new TextField();
                    graphic = new VBox();
                    graphic.getStyleClass().add("k-column-graphic");
                    graphic.getChildren().addAll(label, search);
                    column.setGraphic(graphic);
                }
            }
        }
    });

所以列的图形就是显示的内容。我正在使用以下 CSS(图形本身有一个“k-column-graphic”CSS 类,而 TableView 有一个“k-table-view”CSS 类)

/** Hide default text label in KTableView */
.k-table-view .column-header > .label  {
    -fx-content-display: graphic-only;
}

.k-column-graphic {
    -fx-alignment: center-left;
    -fx-spacing: 5;
    -fx-padding: 2;
}

这很好用,但我还允许通过启用 TableView.setTableMenuButtonVisible(true); 属性隐藏列,这会添加一个按钮以轻松隐藏列。

每当我尝试隐藏一列时,它都会成功隐藏,但图形(标签/文本字段)仍然存在。两者的宽度似乎都是0或1,而且很小,但你还是能看到它们。

All Visible

Website Hidden

如何通过 CSS 或代码中的某处将 TableColumn 的图形节点也隐藏到哪里?

最佳答案

当您切换 CheckMenuItem 以显示/隐藏列时,您的自定义控件不会自动更改它们的 VisibleProperty 值。因此,您只需将自己控件的VisibleProperty 绑定(bind)到TableColumnVisibleProperty 即可。

以下示例基于您的代码。希望对您有所帮助。

    getColumns().addListener(new ListChangeListener<TableColumn<S, ?>>() {
        @Override
        public void onChanged(final ListChangeListener.Change<? extends TableColumn<S, ?>> change) {
            while (change.next()) {
                Label label;
                TextField search;
                VBox graphic;
                for (TableColumn<S, ?> column : change.getAddedSubList()) {
                    label = new Label(column.getText());
                    search = new TextField();
                    graphic = new VBox();
                    graphic.getStyleClass().add("k-column-graphic");
                    graphic.getChildren().addAll(label, search);
                    column.setGraphic(graphic);

                    /* ======= add the following two lines ============== */
                    label.visibleProperty().bind(column.visibleProperty());
                    search.visibleProperty().bind(column.visibleProperty());
                }
            }
        }
    });

关于JavaFX TableColumn 图形不隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669166/

相关文章:

javascript - jQuery UI slider 通过外部控件向前和向后移动

JavaFX 创建透明径向渐变

textarea - JavaFX/ScalaFX - 更改禁用 TextArea 的文本颜色?

JavaFx 与 Maven : doesn't find the mainClass

java - 当我将 recyclerview 版本从 23.0.1 更改为 23.2.1 时,gradle 文件错误

java - 触发Java进程检测满足特定条件的记录

javascript - 网站上的移动菜单问题

java - Android RecyclerView 项目点击不起作用 - MVVM

Java JTable 列标题未显示 - JScrollPane?

css - Safari flexbox 文本换行问题