我们有一个组件Component mainComp
,它将位于scrollPane中;
scrollPane.add(mainComp);
在某些时候,这样的东西被称为
mainComp.setPreferredSize(null);
Component parent = jframe1.getParent();
while (parent != null){
parent.setPreferredSize(null);
parent = parent.getParent();
}
此后滚动条消失,只有当我通过鼠标调整JFrame
时才会再次出现。
我不明白如何让JScrollPane
强制重新计算它是否需要显示滚动条。有可能吗?
答案 0 :(得分:2)
在某些时候,这样的东西被称为
mainComp.setPreferredSize(null); Component parent = jframe1.getParent(); while (parent != null){ parent.setPreferredSize(null); parent = parent.getParent(); }
after this the scrolling bars gets disappeared and appear again only if I resize JFrame via mouse.
So I can't understand how to make JScrollPane force to recalculate \ rethink that it needs to show the scrolling bars?
JScrollPane查看其JViewPort所持有的组件的大小,如果大于JViewPort的大小,则会显示滚动条。当你使JScrollPane保持的组件的首选大小为null时,那就是它的大小混乱(在领主知道用什么方式,我从未见过这样的代码是诚实的),并且你松开滚动条。我想到的解决办法就是不要拨打setPreferredSize(null)
。永远。必须有更好的方法来实现您尝试做的事情,如果您告诉我们更多关于您的代码和问题的信息,我们很可能会帮助您找到这个。我不得不怀疑你的问题实际上是伪装成XY Problem。
答案 1 :(得分:2)
您可以强制JScrollPane
始终使用setHorizontalScrollBarPolicy
和setVerticalScrollBarPolicy
显示滚动条:
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
请参阅:Setting the Scroll Bar Policy
启动时,
ScrollDemo
应用程序中的滚动窗格有两个滚动条。如果使窗口变大,则两个滚动条都会消失,因为它们不再需要。如果然后缩小窗口的高度而不更改其宽度,则会再次出现垂直滚动条。进一步的实验将表明,在这个应用程序中,两个滚动条都会消失并根据需要重新出现。此行为由滚动窗格的滚动条策略控制,实际上,它是两个策略:每个滚动条都有自己的。
注意:虽然此回答了您提出的问题,但请参阅@HovercraftFullOfEels answer about why you should never use setPreferredSize(null)
EVER.