【问题标题】:javafx column in tableview does not fit prefWidthtableview 中的 javafx 列不适合 prefWidth
【发布时间】:2015-09-04 06:29:57
【问题描述】:

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

Article - How to remember the width of TableColumns

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

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

任何帮助将不胜感激。非常感谢。

【问题讨论】:

  • “但我希望在用户更改列宽时列不消失”是什么意思?
  • 如果调整大小策略设置为 UNCONSTRAINED,用户可以拖放列边框。用户可以增加第一列的宽度,以便不再显示后续列(用户必须调整应用程序窗口的大小才能再次看到这些列或减小可见列的宽度)。

标签: java layout javafx width tableview


【解决方案1】:

这是一个老问题,不清楚这里要问什么,但我在设置TableColumnprefWidth 时遇到了类似的问题(我猜),这是行不通的。所以我查看了 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());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2018-01-09
    • 2017-12-25
    相关资源
    最近更新 更多