簡體   English   中英

JavaFX TableColumn圖形不隱藏

[英]JavaFX TableColumn Graphic not Hiding

我正在為我的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);隱藏列TableView.setTableMenuButtonVisible(true); 屬性,添加一個按鈕以輕松隱藏列。

每當我嘗試隱藏列時,它都會成功隱藏,但圖形(Label / TextField)仍然存在。 兩者似乎都有0或1的寬度,並且非常小,但您仍然可以看到它們。

全部可見

網站隱藏

如何通過CSS或我的代碼中的某個地方,將它用於TableColumn的圖形節點也將隱藏的位置?

當您切換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());
                }
            }
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM