2013-04-29 29 views
1

因此,我为一个班级编写了一个小程序。我将它设计为一​​个JApplet,而不是在浏览器中。除此之外,这是一个简单的绘图程序。您单击两个点来绘制选定的形状,然后调用重绘。我遇到的问题是,当您将程序移至辅助监视器时绘制时,整个JApplet似乎消失,只显示绘制的形状。它只在第二点被选中后消失,所以我认为它在repaint()上做了这个。我的JApplet在移动到辅助监视器时消失

我的辅助显示器使用完全相同的品牌和分辨率,甚至是颜色配置文件。

任何其他技术细节,我正在使用Eclipse的运行按钮进行测试,使用Java 1.7(无法回想起我头顶的哪个更新),Windows 8 Enterprise 64x。

在此先感谢您的帮助!

+0

*“我将它设计成一个JApplet放入一个未装饰的JFrame中”*这是您应该修复的第一件事。将它放在一个'JPanel'中,然后可以将它添加到未修饰的框架,窗口或其他任何需要的地方。这个问题听起来像应用程序可疑。在组件上调用'getGraphics()'。如果这是正确的,当放置另一个应用程序时可以看到相同的效果。在applet前面,然后最小化应用程序。如果情况并非如此,请发布[SSCCE](http://sscce.org/)以获取更多提示。 – 2013-04-29 14:28:16

+0

谢谢,我会尝试一下JPanel的想法,尽管在最小化窗口时我也遇到了问题。该窗口未修饰,因此我无法访问最小化按钮,因此我绘制了使用setState(JFrame.ICONIFIED)的最小化按钮,并且运行良好,但无法正确恢复框架。只会显示一个带有标题和按钮的小栏。也许JPanel也会解决这个问题。有可能。任何人都会尝试结果。 – OffLuffy 2013-04-29 14:45:40

+0

我的意思是尽量减少应用程序。那就在你的applet之前! – 2013-04-29 14:51:04

回答

2

我的确在调用getGraphics();在JApplet的init()方法中。

这就是问题所在。 Graphics对象是一个暂时的东西,在下一次JVM认为需要这样做时将被重新绘制。这可能是由以下情况触发的:

  • 更改窗口的大小或位置。
  • 用另一个程序覆盖它,然后删除覆盖的应用程序。
  • 添加新组件或更改显示的值。

请参阅Performing Custom Painting了解有关如何执行您正在尝试实现的更多详细信息。 OTOH Swing有JLabel,可以显示BufferedImage。您可以以您想要的方式使用BufferedImage。更新时,请在标签上拨打repaint()查看效果。

+0

感谢您的帮助。看起来我倾向于从头开始重新设计程序以解决其中的一些问题。看起来会更容易。我已经非常滥用几乎所有我已经加入的组件。惊讶它现在的状态。 Java是一个非常神奇的恶意事物。 – OffLuffy 2013-04-29 16:02:34

+0

+1有趣;不同的监视器意味着主机对等组件的不同位。 – trashgod 2013-04-29 18:12:04

相关问题