当前位置: 首页 > 面试题库 >

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

冀俊良
2023-03-14
问题内容

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

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

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

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

我试着做:

scrollpane.repaint();
scrollpane.validate();
scrollpane.revalidate();

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

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

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

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

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


问题答案:

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

panel.add(...);
panel.add(...);
panel.revalidate();
panel.repaint();

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

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



 类似资料:
  • 基本上,从接收一个单击事件,然后我需要多次更改HTML元素,问题是WebView只显示最后一次更改,这意味着渲染不是立即进行的。 问题:如何制作

  • 编辑:当我拖动边框时,某种刷新被发送,我需要弄清楚并手动发送相同的刷新。 请注意,我已经尝试使用revalidate()和repaint()。 当使用JFrame和JPanel来显示一个框架时,我试图使框架的大小易于改变。 null 此外,一个重要的注意事项是,当您拖动边框时,白条会消失,并正确地重新加载/刷新内容(即使您只是少量拖动)

  • 由于响应于单击Set Default按钮所做的更改是更改ListView的UserData(),而不更改支持的ObservableList,因此列表不能正确地指示新的默认值。 是否有方法强制ListView重新呈现其ListCells?Android用户在这个问题上提出了成千上万个问题,但JavaFX似乎并不快乐。我可能不得不对支持数组进行“无意义的更改”来强制重绘。 我看到这是为JavaFX2.

  • 问题内容: 我将SEAM与JPA(实现为Seam托管持久性上下文)一起使用,在后备bean中,我将一组实体(ArrayList)加载到后备bean中。 如果不同的用户修改了另一个会话中的实体之一,而我希望将这些更改传播到会话中的集合中,则我有一种方法并尝试了以下方法… 用以下查询 重新执行查询,这只会返回我已经拥有的相同数据(我假设它正在使用一级缓存而不是访问数据库) 调用,这应该从数据库刷新,但

  • 所以我有一个包含JTable的应用程序。JTable位于JScrollPane的内部,JScrollPane绘制在JFrame上。 现在,在我的应用程序中,我打开一个新窗口,向该表中添加一个新行,在我单击一个按钮保存更改后,新窗口关闭。 现在我尝试在新窗口关闭后添加这些行: 这里有什么问题?

  • 列表数据源不变的情况下如何强制刷新列表?主要是现在列表子布局的声明周期函数中执行特定逻辑