2012-09-07 45 views

回答

13

應用自定義樣式表:

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

該文件hidden-tableview-headers.css被放置在相同的位置類加載CSS的資源,它包含行:

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

visibility: hidden ATTRIB ute告訴JavaFX不要繪製節點,但仍然留下標題所在的位置。由於標題爲一行文字高度高,因此您可以通過設置-fx-padding: -1em;來告訴不可見標題不佔用任何空間。

+0

謝謝jewelsea,但這將保留一個空的空間而不是列標題,我想刪除它。 –

+0

在建議的css中添加了-fx-padding設置,以便不可用的列標題不佔用屏幕上的任何空間(由匿名計算器用戶推薦)。 – jewelsea

+0

@jewelsea,我建議使用'-fx-padding:-2em;'而不是'-1em',因爲當我嘗試時仍然留有一些空間。 – Mansueli

5

該解決方案非常簡單;在tableview呈現之後,我們可以獲取表頭並使其不可見,因此當表視圖佈局更改時,表頭不必重新佈局。 爲了趕上表渲染完成後,我們可以用width屬性的變化,並隱藏表頭

下面是代碼:

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

如果你不想增加額外的.css文件你可能使用現有的CSS:

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

哪裏.hide-header是你應該添加到您的Java代碼中隨機名稱:

table.getStyleClass().add("hide-header");