Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调整大小时会显示JDesktopPane的内容-Java Swing_Java_Image_Swing_Jdesktoppane - Fatal编程技术网

调整大小时会显示JDesktopPane的内容-Java Swing

调整大小时会显示JDesktopPane的内容-Java Swing,java,image,swing,jdesktoppane,Java,Image,Swing,Jdesktoppane,我已经在JavaSwing上工作了一段时间。我在JDesktopPane上绘制一些东西(绘制一些基本形状,如圆形、矩形等),一旦我调整包含JDesktopPane的框架窗口的大小或在此框架上拖动其他窗口,绘制的形状就会消失。我使用BuffereImage类的对象来保存图像。那么,有什么方法可以防止形状消失,或者在形状消失时重新绘制它呢?您需要确保在paintComponent()方法中保存每次绘制的内容并重新绘制。每当需要重新绘制时(例如:由于调整大小),就会自动调用此方法。我只能提供一个猜测,

我已经在JavaSwing上工作了一段时间。我在JDesktopPane上绘制一些东西(绘制一些基本形状,如圆形、矩形等),一旦我调整包含JDesktopPane的框架窗口的大小或在此框架上拖动其他窗口,绘制的形状就会消失。我使用BuffereImage类的对象来保存图像。那么,有什么方法可以防止形状消失,或者在形状消失时重新绘制它呢?

您需要确保在
paintComponent()
方法中保存每次绘制的内容并重新绘制。每当需要重新绘制时(例如:由于调整大小),就会自动调用此方法。

我只能提供一个猜测,因为您决定不发布必要的代码,但我的建议是:

  • 不要通过调用组件上的getGraphics来获取图形对象。相反
  • 确保在对JComponent或其子类(如JPanel)进行子类化的类中进行绘图
  • 在同一方法中调用super.paintComponent()后,立即在JComponent的paintComponent方法中绘制BuffereImage。使用JVM提供并传递到方法参数中的图形对象
  • 为确保paintComponent方法的签名正确,请在其前面立即放置@Override注释。否则,如果它不正确,JVM可能不会在您期望的时候调用它
  • 但是,在这里提问时,请尽量给我们提供足够的信息,这样我们就不必猜测了。既然你的问题是与图形相关的,那么发布与图形相关的代码是有意义的,对吗

您使用什么方法进行绘制?我实际上是在单击鼠标按钮时传递图形对象并使用该对象进行绘制。因此,我将g.drawLine()或其他方法放在formMouseClicked方法中……这是错误的,因为您发现,以这种方式使用时,获得的图形对象不持久。最好让mouseClicked方法更改类字段并调用repaint()。然后,paintComponent方法可以使用更新的字段来决定要绘制的内容。