2012-10-17 118 views
10

在JavaFX 2中使用TableView時,似乎添加了一個奇蹟般的列,而不是調整現有的列大小。請看下面的截圖。TableView具有比指定更多的列

我期望/想要:兩列都有50%的空間,沒有第三個(未命名/空)列應該被添加。

enter image description here

創建使用場景生成器,FXML代碼:

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 

<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> 
    <top> 
    <TableView prefHeight="200.0" prefWidth="200.0"> 
     <columns> 
     <TableColumn prefWidth="75.0" text="Column X" /> 
     <TableColumn prefWidth="75.0" text="Column X" /> 
     </columns> 
    </TableView> 
    </top> 
</BorderPane> 
+0

參見[http://stackoverflow.com/q/11033404/682495](http://stackoverflow.com/q/11033404/682495) –

+0

感謝Uluk,這有助於!請作爲回答發佈,以便我可以選擇它作爲正確的答案:-)你對這種奇怪的行爲有任何想法嗎? –

+2

發生這種情況是因爲默認列寬行爲將列調整爲列中元素的寬度最大。因此空的空間不被使用。 –

回答

26

使用

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

通過這樣做可以確保在表列標題中的額外空間會之間進行分配列。在這個分佈中,列的最大和最小寬度當然被考慮在內。
默認情況下,TableView.UNCONSTRAINED_RESIZE_POLICY用於表格列將首先採用其首選寬度的位置。

+0

你能用FXML嗎? – user3111525

+0

@ user3111525,是的。嘗試使用''。它應該工作,但沒有嘗試。 –

+0

是否可以使用首選寬度,但不在右側顯示其他列?就像UNCONSTRAINED與CONSTRAINED政策一樣。 – smalafeev

2

Uluk Bly的回答對於代碼是絕對正確的。

另外,使用Scenebuilder,確保在屬性下拉窗口中的策略設置爲相同的(約束),它應該在你的FXML文件顯示,像這樣:

<columnResizePolicy> 
    <TableView fx:constant = "CONSTRAINED_RESIZE_POLICY"/> 
    </columnResizePolicy> 
1

這是很好的我的JavaFX 2.2

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
+1

你必須添加一些文字來解釋爲什麼它很好。 –

相關問題