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

丹妮尔·德斯塔(Daniele Testa)

我在程序开始时,根据数据库中的某些内容,以编程方式在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()也将在需要时显示滚动条。当然,这假设您正在使用布局管理器。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

强制JScrollPane和JPanel重新绘制

来自分类Dev

如何强制重新加载/刷新组件视图?

来自分类Dev

如何强制gradle刷新/重新加载(lib)目录包含的内容?

来自分类Dev

如何强制Safari重新绘制位置:滚动上的固定元素?

来自分类Dev

如何强制Qt立即重新绘制paintGL()中的QOpenglWidget?

来自分类Dev

如何强制JScrollPane中的组件显示

来自分类Dev

强制以编程方式重新绘制NSView

来自分类Dev

强制标签在Chrome中重新绘制

来自分类Dev

如何强制Mongoid刷新查询

来自分类Dev

如何强制用户刷新缓存

来自分类Dev

如何强制刷新连接的硬件?

来自分类Dev

AngularJS:如何强制刷新指令?

来自分类Dev

如何强制刷新Chrome,Safari

来自分类Dev

如何强制画布fabricJS刷新

来自分类Dev

更改窗口大小后,如何强制gmap重新绘制素面的中心布局内部?

来自分类Dev

如何刷新/重新加载桌面

来自分类Dev

aSmack,如何强制重新连接?

来自分类Dev

如何强制重新加载页面

来自分类Dev

“强制重新检查”如何工作?

来自分类Dev

如何强制Slack重新连接?

来自分类Dev

如何强制重新排序jsTree?

来自分类Dev

angularjs:强制重新渲染/完全刷新指令模板

来自分类Dev

angularjs:强制重新渲染/完全刷新指令模板

来自分类Dev

如何强制刷新req.user?

来自分类Dev

如何强制对网站进行DNS刷新?

来自分类Dev

Breeze:如何强制刷新缓存中的实体

来自分类Dev

如何强制Rails ActiveRecord提交事务刷新

来自分类Dev

如何强制AmazonSQSBufferedAsyncClient刷新消息?

来自分类Dev

如何在DataGridView中强制“刷新”