Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX TableColumn图形未隐藏_Java_Css_Javafx_Tableview_Visibility - Fatal编程技术网

JavaFX TableColumn图形未隐藏

JavaFX TableColumn图形未隐藏,java,css,javafx,tableview,visibility,Java,Css,Javafx,Tableview,Visibility,我正在为我的TableColumns创建一个自定义标题,该标题是列的标签加上一个允许用户执行搜索的文本字段。我将列标题设置为: getColumns().addListener(new ListChangeListener<TableColumn<S, ?>>() { @Override public void onChanged(final ListChangeListener.Change<? extends TableColum

我正在为我的TableColumns创建一个自定义标题,该标题是列的标签加上一个允许用户执行搜索的文本字段。我将列标题设置为:

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);
                }
            }
        }
    });
这非常有效,但我也允许通过启用
TableView.setTableMenuButtonVisible(true)来隐藏列属性,该属性添加一个按钮以轻松隐藏列

每当我试图隐藏一列时,它都会成功隐藏,但图形(标签/文本字段)仍会保留。两者的宽度似乎都为0或1,并且都非常小,但您仍然可以看到它们


通过CSS或我的代码中的某个地方,我如何将其设置为TableColumn的图形节点也将隐藏的位置?

当您切换
复选框项来显示/隐藏列时,您的自定义控件不会自动更改其
VisibleProperty
的值。因此,您只需将自己控件的
VisibleProperty
绑定到
TableColumn
VisibleProperty

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

    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());
                }
            }
        }
    });
getColumns().addListener(新ListChangeListener()){
@凌驾
更改后的公共void(最终列表ChangeListener.Change>Change){
while(change.next()){
标签;
文本字段搜索;
VBox图形;
for(TableColumn列:change.getAddedPublist()){
label=新标签(column.getText());
搜索=新文本字段();
图形=新的VBox();
graphic.getStyleClass().add(“k-column-graphic”);
graphic.getChildren().addAll(标签、搜索);
列。设置图形(图形);
/*=======添加以下两行========================================*/
label.visibleProperty().bind(column.visibleProperty());
search.visibleProperty().bind(column.visibleProperty());
}
}
}
});
    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());
                }
            }
        }
    });