首页 > 解决方案 > 添加方法 paint() 时 JPanel 的背景颜色被灰色替换

问题描述

我编写了以下基本 Java Swing 示例,它是一个蓝色背景的 JPanel:

public class Chart1 extends JFrame {
    
    private MainPanel1 main;    
    
    public Chart1() throws InterruptedException {
        
        setSize(600,500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        // CREATE AND ADD MAIN PANEL
        main = new MainPanel1();
        this.getContentPane().add(main, BorderLayout.CENTER);
        
        // DRAW WINDOW
        this.setVisible(true);
                        
    }
    
}
public class MainPanel1 extends JPanel {        
    
    public MainPanel1() {
        
        setBackground(Color.BLUE);
        
    }
}

我得到以下结果:

蓝色JPanel

到现在为止还挺好。

现在我添加一个paint()方法。源代码如下:

public class MainPanel1 extends JPanel {        
    
    public MainPanel1() {
        
        setBackground(Color.BLUE);
        
    }
    
    public void paint(Graphics g) {
    }

}

然后即使没有做任何事情,paint()我也会得到灰色背景,为什么?我怎样才能解决这个问题?

带油漆的JPanel

标签: javaswingjpanelpaint

解决方案


答案是paint(java 1.0 - 1.1 方法)调用JComponents 中的paintBackground。当您覆盖它时,它并没有调用所有的摆动绘制方法。但是如果你添加 super.paint(g),它看起来就像以前一样。

另外 - 请注意,JFrame 中的默认 ContentPane 已经是 JPanel。而不是用您的 JPanel 替换 ContentPane,您可以调用:

((JPanel) myFrame.getContentPane()).setBackground(Color.blue);

推荐阅读