扩展JPanel,继承了什么

Exi*_*kle -1 java swing doublebuffered jpanel paintcomponent

所以我创建了一个名为BasePanel的抽象JPanel.在其中我使用双缓冲区代码,如下所示:

public void paint(Graphics g) {
    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    paintComponent(dbg);
    g.drawImage(dbImage, 0, 0, this);
    repaint();
}

public void paintComponent(Graphics g) {
    g.setColor(Color.BLACK);
}
Run Code Online (Sandbox Code Playgroud)

然后当在另一个面板上扩展它时,我想知道如果我只覆盖paintComponent方法它仍然会加倍缓冲吗?所以我甚至不需要调用paint方法

一个例子

public class StartScreen extends BasePanel {
    @Override
    public void paintComponent(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());

        g.setColor(Color.WHITE);
        g.drawString("Animation Screen", 175, 150);;

        repaint();

    }

}
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 5

  1. 不要覆盖paint();
  2. 不要在任何绘制方法中调用repaint().
  3. 不要使用getGraphics()方法,你已经有了Graphics对象
  4. 自定义绘制在paintComponent()方法中完成,不要忘记调用 super.paintComponent(...)

双缓冲自动从父组件继承.