tablef中的javafx列不适合prefWidth

问题描述 投票:0回答:1

我想在重新启动javaFX应用程序后恢复TableView中每一列的列宽。因此,我阅读了一篇文章,描述了如何实现这一目标。不幸的是,该代码对我不起作用。重新启动后,列不调整大小。 (但是width和prefWidth的值确实正确更改)

Article - How to remember the width of TableColumns

我已经读过一些书,但无法解决此问题:

我的表的调整大小策略设置为CONSTRAINED_RESIZE_POLICY,这似乎是问题所在。如果我切换到UNCONSTRAINED_RESIZE_POLICY,则列的大小会重新调整。但是,由于我希望用户更改列宽时列不消失,因此我希望保留受限的调整大小策略。

任何帮助将不胜感激。提前谢谢了。

java layout javafx width tableview
1个回答
0
投票

这是一个古老的问题,目前尚不清楚要问什么,但是我在设置prefWidthTableColumn时遇到了类似的问题(我想),这是行不通的。因此,我查看了JavaFX代码,发现prefWidth的处理方式如下:

private final DoubleProperty prefWidth = new SimpleDoubleProperty(this, "prefWidth", DEFAULT_WIDTH) {
        @Override protected void invalidated() {
            doSetWidth(getPrefWidth());
        }
    };

因此,我意识到未调用doSetWidth方法是因为宽度已更改,但prefWidth并未更改。例如,当用户手动调整列大小时会发生这种情况。

可以通过侦听width属性并设置prefWidth来固定它,如下所示:

for (TableColumn col : getColumns()) {
    col.setPrefWidth(col.getWidth());
}
© www.soinside.com 2019 - 2024. All rights reserved.