【问题标题】:JavaFX TableColumn Graphic not HidingJavaFX TableColumn 图形不隐藏
【发布时间】:2013-11-09 06:05:54
【问题描述】:

我正在为我的 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,而且很小,但您仍然可以看到它们。

如何通过 CSS 或在我的代码中的某个位置,使其到达 TableColumn 的图形节点也将隐藏的位置?

【问题讨论】:

    标签: java css javafx tableview visibility


    【解决方案1】:

    当您切换CheckMenuItem 以显示/隐藏列时,您的自定义控件不会自动更改其VisibleProperty 的值。所以你需要做的只是简单地将你自己控件的VisibleProperty绑定到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());
                    }
                }
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 2014-05-09
      • 2021-09-15
      • 2015-01-05
      • 1970-01-01
      • 2013-11-25
      相关资源
      最近更新 更多