how to javafx hide background header of a tableview?

前端 未结 3 1661
遥遥无期
遥遥无期 2020-12-16 06:32

I\'m trying to develop auto complete text, which shows a dropdown of suggestions in tableview popup, and I\'m having an issue of how can I hide the whole header-column of ta

相关标签:
3条回答
  • 2020-12-16 07:13

    The solution is very simple; after the tableview renders, we can get the table header and make invisible, therefor the table header doesn't have to re-layout when the table view layout changes. To catch table rendering is done, we can use width property change, and hide the table header

    Here is the code:

    tableView.widthProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
                // Get the table header
                Pane header = (Pane)tableView.lookup("TableHeaderRow");
                if(header!=null && header.isVisible()) {
                  header.setMaxHeight(0);
                  header.setMinHeight(0);
                  header.setPrefHeight(0);
                  header.setVisible(false);
                  header.setManaged(false);
                }
            }
        });
    
    0 讨论(0)
  • 2020-12-16 07:20

    Apply a custom stylesheet to the table:

    table.getStylesheets().addAll(getClass().getResource("hidden-tableview-headers.css").toExternalForm());
    

    Where the file hidden-tableview-headers.css is placed in the same location as the class loading the css resource and contains the line:

    .column-header-background { visibility: hidden; -fx-padding: -1em; }
    

    The visibility: hidden attribute tells JavaFX not to draw the node, but still leave space where the heading was. As the header is 1 row of text height high, you can tell the invisible header not to take up any space by setting -fx-padding: -1em;.

    0 讨论(0)
  • 2020-12-16 07:35

    If you don't want to add additional .css file you may use your existing css:

    .hide-header .column-header-background { 
        visibility: hidden; -fx-padding: -1em;
    }
    

    Where .hide-header is random name which you should add to your java code:

    table.getStyleClass().add("hide-header");
    
    0 讨论(0)
提交回复
热议问题