如何在javafx中设置tableview中的列宽?

时间:2015-02-10 09:35:01

标签: javafx

我有一个有两列的表。我应该将宽度设置为30%和70%。该表是可扩展的,但不是列。我如何实现这一目标?

2 个答案:

答案 0 :(得分:14)

TableView s columnResizePolicy是您的朋友:

如果设置TableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY),所有列的大小将同等调整,直到达到TableView的最大宽度。

此外,您可以编写自己的政策:该政策只是一个Callback,其中ResizeFeatures是您可以访问TableColumn的输入。

答案 1 :(得分:14)

如果“表格可扩展但不是列”,则表示用户无法调整列的大小,然后在每列上调用setResizable(false);

要使列保持相对于整个表宽度的指定宽度,请绑定列的prefWidth属性。

SSCCE:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class TableColumnResizePolicyTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        TableView<Void> table = new TableView<>();
        TableColumn<Void, Void> col1 = new TableColumn<>("One");
        TableColumn<Void, Void> col2 = new TableColumn<>("Two");
        table.getColumns().add(col1);
        table.getColumns().add(col2);

        col1.prefWidthProperty().bind(table.widthProperty().multiply(0.3));
        col2.prefWidthProperty().bind(table.widthProperty().multiply(0.7));

        col1.setResizable(false);
        col2.setResizable(false);

        primaryStage.setScene(new Scene(new BorderPane(table), 600, 400));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}