2017-05-06 28 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