2013-10-17 37 views
0

我有一個TableView,其列數超過了屏幕寬度。當第一次加載時,所有列都具有相同的寬度,但是隻要我移動其中一個,就會將它們的大小調整爲等於列的單元格內數據的最大寬度的寬度。JavaFX,移動後的TableView中的列大小調整後

我的問題是:是否可以禁用此行爲或使其工作,直到TableView的第一次加載?

PS: TableView被加載爲空,然後按下它充滿數據的按鈕,因爲在發送數據請求之前您有一些要輸入的關鍵字段。

回答

0

經過一些測試後,我發現所描述行爲的原因是:not explicity設置了列prefWidth。

如果您創建了自年初以來的內部數據和一個泰伯維沒有設置列prefWidth,所有列的寬度將盡快拖動匹配數據的最大寬度,如果您更改列的寬度,一個寬度會恢復到原來的價值。

如果你創建了數據的泰伯維從一開始就和設置欄prefWidth內,所有列的寬度將匹配設定值不變,如果你拖動一個前放大一列則該列的寬度將保持不變。

我不知道這是一個錯誤還是需要它。不過謝謝jewelsea的建議。

0

當它第一次加載,所有列具有相同的寬度,但是,只要我移動的其中之一,所有的人都調整爲寬度等於數據的單元格內的最大寬度柱。

這種行爲有點奇怪。我不確定它是否如預期的那樣,或者它是否是一個錯誤。如果您認爲這是一個錯誤,請將其存入JavaFX bug tracker

我假設你的意思是你點擊一個表頭,並將列拖到另一個位置重新排列列。

似乎有(至少)兩種方法來修復它,以便在列移動後保留用戶指定的列寬。

A.使用CONSTRAINED_RESIZE_POLICY(主要)修復它。

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

OR

B.綁定的每一列的其中prefWidth到它的實際寬度。

firstNameCol.prefWidthProperty().bind(firstNameCol.widthProperty()); 
+0

行爲與CONSTRAINED_RESIZE_POLICY或UNCONSTRAINED_RESIZE_POLICY相同。另外計劃B不起作用。 – Luca

+0

CONSTRAINED_RESIZE_POLICY當然適用於JavaFX 2.2b40。 – jewelsea

+0

這是CONSTRAINED_RESIZE_POLICY的定義:「確保此表中所有可見葉列寬度總和等於表本身寬度的簡單策略」。所以它在數據加載到表格中時起作用,但當您拖動列時,列寬將被調整。 – Luca