3

我创建了一个扩展 aJFrameJPanel在其中添加 a 的类,但该paintComponents()方法没有在JPanel. 继承人的代码paintComponents(),我选择使用双图像缓冲。

  public void paintComponents(Graphics graphics) {
     panel.paintComponents(graphics);

      bufferedImage = createImage(sizeX, sizeY);
      Graphics2D g = (Graphics2D) bufferedImage.getGraphics();


      for (ImageData myImage : imageData) {
        g.drawImage(myImage.getImage(), myImage.getX(), myImage.getY(), null);
    }

    graphics.drawImage(bufferedImage, 0, 0, null);
  }

这有什么问题吗?顺便说一句,我试过paint()了,它奏效了,但我认为这不是正确的方法。

谢谢你的时间。:)

4

2 回答 2

7

不要扩展顶级组件,例如JFrame. 而是保留一个框架的实例,并为其添加一个面板。所有自定义绘画或组件添加都在面板中完成。

在面板中进行自定义绘画时,请在 paintComponent方法中进行(不要 paintComponents不覆盖)。

其他提示

  • 记得打电话super.paintComponent(g);。这对于确保考虑边界和填充等很重要。
  • 换成. null_ this每一个JComponent都是一个ImageObserver
于 2012-08-17T19:32:14.257 回答
2

请注意,JFrame 不是 JComponent!事实上,该paintComponents(Graphics)方法永远不会被调用。一个修复方法是将 JPanel 子类化并将您的子类面板添加到框架中作为内容窗格。在面板中覆盖该paintComponents(Graphics)方法。

于 2012-08-17T19:32:17.063 回答