如何在桌子构造的所有列中扩展总宽度?“

时间:2017-12-17 04:24:59

标签: java javafx tableview javafx-tableview

我正在尝试编写一个类似于for i in range(draftgroupid)的自定义调整大小策略,因为它将列中所有可见列的总宽度设置为表中的总可用宽度,以便不会出现水平滚动条。

我正在使用第TableView.CONSTRAINED_RESIZE_POLICY行来尝试这样做(请参阅下面的完整代码)。

不幸的是,这个计算似乎返回double widthAvailable = table.getWidth() - getScrollbarWidth(table);太多了。我的猜测是,还有一些其他的东西我也应该从我丢失的表宽度中减去,在默认的JavaFX主题中恰好是4像素宽。

这是一个展示问题的完整程序:

4

看看桌子的宽度是多少?我希望能够设置列的宽度,以便不显示水平滚动条。

enter image description here

1 个答案:

答案 0 :(得分:2)

Scenic View是一个熟悉的有用工具。它为您提供了有关场景图的许多详细信息。您要查找的空间是clipped-container

enter image description here

enter image description here

请注意,以有效方式设置CustomResizePolicy不允许调整列的大小,因为它们始终被分配相等的可用空间份额。

以下是您可能正在寻找的计算:

Region region = null;
Set<Node> nodes = table.lookupAll(".clipped-container");
for (Node node : nodes) {
    if (node instanceof Region) {
        region = (Region) node;
    }
}
for (TableColumn<Locale, ?> column : table.getColumns()) {
    column.setPrefWidth(region.getWidth() / table.getColumns().size());
}

我不完全理解为什么CONSTRAINED_RESIZE_POLICY不是您想要的,因为它平均划分空间并且不允许调整大小超过分配的空间(因此不会出现水平滚动条),但是如果您正在制定一些特殊的调整大小政策,上述内容应该有所帮助。