我们有一个组件Component mainComp
,它将在scrollPane中;
scrollPane.add(mainComp);
在某种程度上,像这样的东西被称为
mainComp.setPreferredSize(null);
Component parent = jframe1.getParent();
while (parent != null){
parent.setPreferredSize(null);
parent = parent.getParent();
}
在此之后,滚动条消失并再次出现,只有当我通过鼠标调整JFrame
的大小。
我不明白如何使JScrollPane
强制重新计算是否需要显示滚动条。这可能吗?
您可以使用setHorizontalScrollBarPolicy
和setVerticalScrollBarPolicy
强制JScrollPane
始终显示滚动条:
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
参见:设置滚动条策略
在启动时,
ScrollDemo
应用程序中的滚动窗格有两个滚动条。如果将窗口变大,则两个滚动条都会消失,因为不再需要它们。如果然后缩小窗口的高度而不更改其宽度,则垂直滚动条将重新出现。进一步的实验将表明,在这个应用程序中,滚动条会根据需要消失和重新出现。此行为由滚动窗格的滚动条策略控制,实际上,它有两个策略:每个滚动条都有自己的。
注意:虽然这个回答了你问过的问题,请参阅@HovercraftFullOfEels关于为什么你永远不应该使用setPreferredSize(null)
的答案。
在某种程度上,像这样的东西被称为
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问题。