在悬停/单击JMenuItem时重新绘制JPanel

时间:2015-06-27 18:19:09

标签: java swing jpanel repaint jmenuitem

我的桌面Java应用程序有一个带有几个JMenuitems的JMenubar,下面是一个JPanel,当我点击下拉菜单中的一个项目时,我会重新渲染它。

一切正常,但当我悬停或点击我的JMenuitems时,我的JPanel正在重新渲染(我的被覆盖的paintComponent被调用)。

这是一个问题,因为在JPanel上是以编程方式构建的图像(随机播种),并且构造需要一段时间,所以如果我将鼠标悬停在菜单上太多,我的程序会挂起..

为什么会这样,我该如何解决?

编辑:即使我播种随机值并获得相同的图像,程序也会进行太多不必要的计算,并且会变慢。

1 个答案:

答案 0 :(得分:3)

  当我悬停或点击paintComponent时,

...(我的被覆盖的JMenuitems被调用)。这是一个问题,......为什么会这样......

这是预期的行为。只要确定有必要,工具包将重新绘制一个面板:E.G.s

  • 出现或消失的菜单
  • 显示在其上的另一个窗口或对话框
  • 用户调整窗口大小...
  JPanel上的{p> ...是以编程方式构建的图像(随机播种),构造需要一段时间,......

为了避免重新创建复杂的绘画,请将细节绘制到BufferedImage,然后在绘制方法中绘制图像,或者(更简单)将其显示在标签中。