【问题标题】:JMenu leaves a gray box above a JPanel on which image is drawnJMenu 在绘制图像的 JPanel 上方留下一个灰色框
【发布时间】:2017-03-14 14:17:54
【问题描述】:

我正在尝试为我的程序创建一个菜单,该菜单使用 .getGraphics().drawImage(..) 在 JPanel 上绘制一些几何对象

我遇到的问题是,在我在此菜单上选择一个项目后,文本会消失,但背景颜色不会。 slection 调用了一种方法,该方法使用上述命令在此面板上重绘图像,但显然它无助于删除它。

当我点击这个菜单项并且这个灰色框留在菜单之后,我可以通过使用鼠标移动场景来使其消失,这基本上调用了菜单项单击后使用的相同方法。这让我很困惑,为什么菜单项方法调用不会删除框,但下一次调用此方法会。

知道为什么会发生这种情况和/或如何解决它吗?

谢谢。

图片(A、B为JMenuBar上的JMenu,选择JRadioButtonMenuItem后下方灰色框):

【问题讨论】:

  • 我猜你已经阻止面板在检测到菜单消失时允许自己重绘。但是不看代码我也说不出来。
  • 我在面板上手动设置的唯一内容是 setPreferredSize()。 (另外,如果有区别,所有组件都在 JFrame 中)

标签: java swing jpanel bufferedimage jmenu


【解决方案1】:

使用 .getGraphics().drawImage(..) 在 JPanel 上绘制一些几何对象

不要使用getGraphics()进行自定义绘画。

自定义绘制是通过覆盖JPanelpaintComponent(...) 方法完成的。并且不要忘记调用 super.paintComponent(...) 作为第一条语句。

阅读 Custom Painting 上的 Swing 教程部分,了解更多信息和工作示例。

【讨论】:

  • 谢谢,这确实解决了灰盒问题。但是,现在重新绘制图像时,每次重新绘制都会闪烁,可能是什么原因造成的?
  • @EyfI,如果您有更多问题,请提出另一个问题,其中包含正确的 minimal reproducible example 来证明问题。在创建MCVE 时,您可能会发现问题。同样,本教程的重点是让您阅读教程并下载工作示例,以学习编写自定义绘画的正确方法。确保您遵循本教程的代码。 How to Use Menus上也有教程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多