2017-05-06 50 views
0

我有3列的表。该表使用CONSTRAINED_RESIZE_POLICY。JavaFX - 停止表格列从父母调整大小

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

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

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

任何想法如何做到这一点?

+0

我想你可以设置该列的最小和最大宽度。 – Sedrick

+0

@SedrickJefferson:如果我这样做,用户将无法调整列的大小。 – JoshuaD

回答

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); 
+0

太棒了。这似乎是完美的。谢谢! – JoshuaD

+0

如果受控列是表中的最后一列,则这不起作用。当整个表被调整大小时,它会导致列的总宽度小于或大于表,并且最后一列的宽度不可更改。任何想法如何修改它在这种情况下工作? – JoshuaD

+0

此外,固定列左侧的列大小调整不正确。 (它收缩很好)。 – JoshuaD