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

如何在javafx的tableview中设置列宽?,javafx,Javafx,我有一个有两列的表。我应该将宽度设置为30%和70%。表是可展开的,但不是列。如何实现这一点?桌面视图是您的朋友: 如果设置TableView.setColumnResizePolicy(TableView.constrated\u RESIZE\u POLICY)所有列的大小将相等,直到达到TableViews的最大宽度 此外,您还可以编写自己的策略:该策略只是一个回调,其中ResizeFeatures作为输入提供,您可以从中访问表格列,,如果通过“表格可展开,但列不可展开”,您的意思是用户不

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

桌面视图是您的朋友:

如果设置
TableView.setColumnResizePolicy(TableView.constrated\u RESIZE\u POLICY)
所有列的大小将相等,直到达到
TableView
s的最大宽度

此外,您还可以编写自己的策略:该策略只是一个
回调
,其中
ResizeFeatures
作为输入提供,您可以从中访问
表格列
,,如果通过“表格可展开,但列不可展开”,您的意思是用户不应该能够调整列的大小,然后调用
setresizeable(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);
    }
}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.layout.BorderPane;
导入javafx.stage.stage;
公共类TableColumnResizePolicyTest扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
TableView table=新TableView();
TableColumn col1=新的TableColumn(“一”);
TableColumn col2=新的TableColumn(“两”);
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.可设置大小(false);
col2.可设置大小(false);
设置场景(新场景(新边框窗格(表),600400));
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

我已经设置了。表已经被适当地调整了大小。但是问题是我不能设置列宽度。如果我调整大小,它在末端显示另一个空列。那么你应该考虑发布一个MVE()。显示您的问题。我认为这在FXML中无法管理有点令人遗憾。比如设置
宽度权重
之类。@TrudleR我认为您可以在FXML中这样做,没有?
。没有尝试过,但我不明白为什么它不起作用。这听起来非常有趣。但看起来tableColumn无法做到o在FXML中乘法。@TrudleR“tableColum不能乘法”是什么意思?我测试;它很好用。这只是一个表达式绑定:请。@TrudleR等等,什么?你发布了一个问题,现在你要阅读文档了?你应该在发布问题之前进行调查。。。。