table列不会占用javaFX中表视图的完整大小

我正在尝试创建一个包含两列的表。 我正在使用netbeans 7.2中包含的场景构建器。 在我看到的所有示例中,您需要做的就是将表列拖到表中,它将采用完整大小,在我的情况下不是这样。 这是场景构建器生成的fxml文件。 只是为了清楚我不是从java更改表属性。

fxml:

                                    

更新

JavaFX 2.2+版本中的新function使得这个答案在应用FXML文档时已经过时。

基于FXML的解决方案使用新的FXMLfunction,允许通过FXML设置列大小,提供: FXML set TableView列resize策略 。

        

如果您没有使用FXML,TableView的resize策略仍然可以通过此答案中定义的代码进行设置:

 tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

在FXML中,您已将表的首选宽度定义为837,并将每列的首选宽度定义为75.默认情况下,JavaFX列resize策略将使列保持其首选宽度。 除非您设置新的列大小调整策略或将所有列的首选宽度总和设置为与表宽度相加,否则不会使表格列填满整个表格的宽度。

JavaFX确实提供了一种修改默认列大小调整策略的机制。 通过将列resize策略设置为CONSTRAINED_RESIZE_POLICY ,每个列的宽度总和将被约束以填充tableview的宽度 – 即使调整了tableview或调整了单个列的大小。 这可能是你想要的行为。

虽然可能有一种方法可以在FXML的tableView上设置CONSTRAINED_RESIZE_POLICY,但我并不知道(虽然我在fxml中的技能很简陋 – 所以也许有人可以通过纯fxml来完成配置)。

您可以做的是为fxml文件定义控制器,然后在控制器中配置resize策略。 以下代码演示了一个完整的示例(针对JavaFX 2.2b17预览编写)。

FXML文件:

                 

控制器类:

 package tableview; import java.net.URL; import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.TableView; /* controller class for the tableview fxml definition */ public class TableViewController implements Initializable { @FXML // fx:id="tableView" private TableView tableView; // Value injected by FXMLLoader @Override // This method is called by the FXMLLoader when initialization is complete public void initialize(URL fxmlFileLocation, ResourceBundle resources) { assert tableView != null : "fx:id=\"tableView\" was not injected: check your FXML file 'tableview.fxml'."; // initialize your logic here: all @FXML variables will have been injected tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); } } 

申请类:

 package tableview; import java.io.IOException; import java.net.URL; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; import javafx.stage.Stage; /** Main application class for tableview fxml demo application */ public class TableViewApplication extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws IOException { AnchorPane layout = FXMLLoader.load( new URL(TableViewApplication.class.getResource("tableview.fxml").toExternalForm()) ); stage.setScene(new Scene(layout)); stage.show(); } } 

目前无法在FXML的tableView上设置CONSTRAINED_RESIZE_POLICY

https://forums.oracle.com/forums/thread.jspa?threadID=2337733

如果您使用JavaFX GUI构建器“SceneBuilder 2.0” – 使用TableView属性ColumnResizePolicy “constrained-resize”值。