如何强制刷新/重新绘制JScrollPane?

我在程序开始时,根据数据库中的某些内容,以编程方式在JScrollPane中添加了许多组件(JPanels,JLabels等)。

似乎对于GUI(?)而言,此过程太快了,因此JScrollPane并不总是正确更新,即,即使内部JPanel大于可见区域,滚动条也不可见。

调整窗口大小(JFrame)可以解决此问题,因为我认为Java在调整组件大小时会重新打印它们。

作为测试,我添加了一个调试按钮,程序启动完成后可以单击该按钮。我正在尝试强制JScrollPane“刷新”自身。

我试着做:

scrollpane.repaint();

scrollpane.validate();

scrollpane.revalidate();

他们似乎都不起作用。但是,如果更改边框(或与JScrollPane相关的任何其他布局),则它将正确刷新。

scrollpane.setBorder(new LineBorder(Color.RED));

所以我基本上有两个问题。

  1. 强制滚动窗格“刷新”的命令是什么?显然,当我添加边框时,它正在执行某种“重绘”操作。我该怎么办?

  2. 有没有一种在添加组件时“暂停”打印并在添加所有所需组件之后再次恢复打印的方法?现在,我基本上可以“看到”正在屏幕上添加的组件(即使它确实非常快)。如果我可以添加所需的所有组件,然后告诉程序将其打印到屏幕/ JFrame,那会更好。

回答:

将组件添加到可见面板的基本代码是:

panel.add(...);

panel.add(...);

panel.revalidate();

panel.repaint();

添加组件不会执行任何操作,因为该组件的大小仍为零,因此无需绘制任何内容。当您调用revalidate()方法时,将调用布局管理器,因此组件现在将具有位置/大小。然后repaint()将绘制组件。revalidate()也将在需要时显示滚动条。当然,这假设您正在使用布局管理器。

组件被添加到面板中,因此您可以调用面板上的方法,而不是滚动窗格。

以上是 如何强制刷新/重新绘制JScrollPane? 的全部内容, 来源链接: utcz.com/qa/422124.html

回到顶部