JScrollPane如何理解何时需要显示滚动条



我们有一个组件Component mainComp,它将在scrollPane中;

scrollPane.add(mainComp);

在某种程度上,像这样的东西被称为

mainComp.setPreferredSize(null);
Component parent = jframe1.getParent();
while (parent != null){
  parent.setPreferredSize(null);
  parent = parent.getParent();
}

在此之后,滚动条消失并再次出现,只有当我通过鼠标调整JFrame的大小。

我不明白如何使JScrollPane强制重新计算是否需要显示滚动条。这可能吗?

您可以使用setHorizontalScrollBarPolicysetVerticalScrollBarPolicy强制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问题。

最新更新