Java - JPanel上的paintComponents无法正常工作

时间:2012-08-17 19:27:49

标签: java swing jframe paintcomponent

我创建了一个扩展JFrame的类,并在其中添加了JPanel,但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()但它有效,但我认为这不是正确的方法。

感谢您的时间。 :)

2 个答案:

答案 0 :(得分:7)

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

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

其他提示

  • 请记得致电super.paintComponent(g);。这对于确保考虑边界和填充等非常重要。
  • null交换this。每个JComponent都是ImageObserver

答案 1 :(得分:2)

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