gpt4 book ai didi

Java 和 JScrollPane : where to call setPreferredSize?

转载 作者:行者123 更新时间:2023-12-01 05:51:07 25 4
gpt4 key购买 nike

我正在使用 JScrollPane 并在 viewportView.doLayout 内调用 viewportView.setPreferredSize。但这似乎是错误的,因为 JScrollPane 的滚动条始终根据 doLayout 之前的最后一个 setPreferredSize 进行更新。因此,似乎在重新验证的情况下,JScrollPane 首先根据首选大小更新滚动条,然后调用 doLayout

我可以改变这种行为吗?或者我应该在哪里调用setPreferredSize?或者我应该把布局子组件的代码放在哪里?

<小时/>

我想出了一种有效的方法:

viewportView.doLayout 内调用 this.setPreferredSizethis.setSize

我将这个问题悬而未决,因为我真的不明白为什么它会起作用(如果我删除其中一个,它就不起作用)并且想知道。

<小时/>

好吧,这有效,因为它生成了无限循环,即它总是将一些重新验证请求推送到事件循环中,当然这解决了问题。然而,这并不是真正的解决方案。

我现在有这个:

// In viewportView of the JScrollPane:
@Override public void doLayout() {
// ... layout childs ...
// size.x/size.y being the size I want to have for the viewportView
if(size.x != getPreferredSize().width || size.y != getPreferredSize().height) {
setPreferredSize(new Dimension(size.x, size.y));
if(getParent() != null) getParent().validate();
}
}

现在看来效果很好。

仍然想知道是否有人可以澄清这是否是正确的方法,如果不是,那会是什么。

最佳答案

如果您想要 JScrollPane 的内容(例如 JPanel)大小,请将其设置为内容。如果您想要 JScrollPane 的大小,请将其设置为 JScrollPane。无需调用viewPortView的方法。

关于Java 和 JScrollPane : where to call setPreferredSize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com