2012-10-17 116 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

你必须添加一些文字来解释为什么它很好。 –

相关问题