【问题标题】:Content of JDesktopPane dissappears when resized - Java Swing调整大小时 JDesktopPane 的内容消失 - Java Swing
【发布时间】:2023-03-24 01:31:02
【问题描述】:

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

【问题讨论】:

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

标签: java image swing jdesktoppane


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多