我的桌面Java应用程序有一个带有几个JMenuitems的JMenubar,下面是一个JPanel,当我点击下拉菜单中的一个项目时,我会重新渲染它。
一切正常,但当我悬停或点击我的JMenuitems时,我的JPanel正在重新渲染(我的被覆盖的paintComponent被调用)。
这是一个问题,因为在JPanel上是以编程方式构建的图像(随机播种),并且构造需要一段时间,所以如果我将鼠标悬停在菜单上太多,我的程序会挂起..
为什么会这样,我该如何解决?
编辑:即使我播种随机值并获得相同的图像,程序也会进行太多不必要的计算,并且会变慢。
答案 0 :(得分:3)
当我悬停或点击paintComponent
时,...(我的被覆盖的
JMenuitems
被调用)。这是一个问题,......为什么会这样......
这是预期的行为。只要确定有必要,工具包将重新绘制一个面板:E.G.s
JPanel
上的{p> ...是以编程方式构建的图像(随机播种),构造需要一段时间,......
为了避免重新创建复杂的绘画,请将细节绘制到BufferedImage
,然后在绘制方法中绘制图像,或者(更简单)将其显示在标签中。