how to javafx hide background header of a tableview?
Asked Answered
L

3

5

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 tableview in javafx 2.1

Lynd answered 7/9, 2012 at 19:47 Comment(0)
A
14

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;.

Akanke answered 7/9, 2012 at 20:15 Comment(3)
Thanks jewelsea, but this will keep an empty space instead of the column header, and I want to remove it.Lynd
Added a -fx-padding setting to the suggested css so that the invible column header does not take up any space on the screen (as recommended by an anonymous stackoverflow user).Akanke
@jewelsea, I suggest to use -fx-padding: -2em; instead of -1em as one was still leaving some space when I tried.Sterilization
L
5

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);
            }
        }
    });
Lynd answered 17/9, 2012 at 18:31 Comment(0)
A
0

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");
Accord answered 7/7, 2016 at 14:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.