tableview中的javafx列不适合prefWidth

时间:2015-06-18 14:36:57

标签: java layout javafx width tableview

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

Article - How to remember the width of TableColumns

我已经做了一些阅读,但无法解决这个问题:

我的表的调整大小策略设置为CONSTRAINED_RESIZE_POLICY,这似乎是问题所在。如果我切换到UNCONSTRAINED_RESIZE_POLICY,则会调整列的大小。但是,当我想要在用户更改列宽时不会消失列时,我想继续使用受约束的调整大小策略。

非常感谢任何帮助。提前谢谢了。

1 个答案:

答案 0 :(得分:0)

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

TableColumn

因此,我意识到未调用private final DoubleProperty prefWidth = new SimpleDoubleProperty(this, "prefWidth", DEFAULT_WIDTH) { @Override protected void invalidated() { doSetWidth(getPrefWidth()); } }; 方法是因为宽度已更改,但prefWidth并未更改。例如,当用户手动调整列大小时会发生这种情况。

只需侦听width属性并设置prefWidth即可修复它,如下所示:

doSetWidth