JavaFX - 使用父级调整大小停止表列

时间:2017-05-06 08:33:23

标签: java javafx

我有3列的表格。该表使用CONSTRAINED_RESIZE_POLICY。

用户可以调整所有三列的大小。

当表的宽度增加或减少时,我希望中间列保持与原样相同的宽度(以像素为单位),并且多余的空间可以从其他列中分配(或获取)。与现在发生的基本方式相同。

基本上,我会为表格列提供SplitPane.setResizableWithParent( <child>, false )功能。

知道怎么做到这一点?

1 个答案:

答案 0 :(得分:1)

仅在拖动列时重置最小和最大宽度。这是一个内部类的例子。

class CustomResizePolicy implements Callback<TableView.ResizeFeatures, Boolean> {
    static final double DEFAULT_MIN_WIDTH = 10.0F, DEFAULT_MAX_WIDTH = 5000.0F;
    @Override
    public Boolean call(TableView.ResizeFeatures feature) {
        final TableColumn<?,?> c = feature.getColumn();
        if (c == column2) {
            c.setMinWidth(DEFAULT_MIN_WIDTH);
            c.setMaxWidth(DEFAULT_MAX_WIDTH);
        }
        boolean result = TableView.CONSTRAINED_RESIZE_POLICY.call(feature);
        if (c == column2) {
            c.setMinWidth(c.getWidth());
            c.setMaxWidth(c.getWidth());
        }
        return result;
    }
}

tableView.setColumnResizePolicy(new CustomResizePolicy());
column2.setMaxWidth(200); // Need to fix column2's width in this case
column2.setMinWidth(200);
column1.setMaxWidth(5000); // Divide left margin with a ratio of 1:2
column3.setMaxWidth(10000);