Java paintComponent没有擦除JPanel

Java paintComponent没有擦除JPanel,java,swing,jpanel,jbutton,paintcomponent,Java,Swing,Jpanel,Jbutton,Paintcomponent,该程序将在JPanel上显示3个按钮。程序编译成功。然后出现GUI窗口,该窗口为空。当我最小化窗口,然后再次将其最大化时,按钮就会出现。再次执行此操作时,会出现另一组按钮。当窗口刷新且旧数据保持完整时,按钮将继续显示 JPanel类 JFrame类 驾驶员等级 每次需要重新绘制面板时,都会调用paintComponent,因此每次最小化窗口时,它都会再次放置按钮。如果我理解了您要正确执行的操作,则需要删除覆盖并放置以下代码: jb1 = new JButton(); jb2 = new JBut

该程序将在JPanel上显示3个按钮。程序编译成功。然后出现GUI窗口,该窗口为空。当我最小化窗口,然后再次将其最大化时,按钮就会出现。再次执行此操作时,会出现另一组按钮。当窗口刷新且旧数据保持完整时,按钮将继续显示

JPanel类

JFrame类

驾驶员等级


每次需要重新绘制面板时,都会调用
paintComponent
,因此每次最小化窗口时,它都会再次放置按钮。如果我理解了您要正确执行的操作,则需要删除覆盖并放置以下代码:

jb1 = new JButton();
jb2 = new JButton("Green");
jb3 = new JButton("Blue");
//g.drawString("Welcome!", 100, 100);
ImageIcon img = new ImageIcon("next.png");
jb1.setIcon(img);
jb1.setToolTipText("Button 1");
this.add(jb1);
this.add(jb2);
this.add(jb3);

在MyJPanel类的构造函数中。

感谢您的及时回复。成功了!
class MyJFrame extends JFrame {
MyJPanel mjp;

public MyJFrame(String title) {
    super(title);

    mjp = new MyJPanel();

    Container ct = getContentPane();
    ct.add(mjp);

    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class Gui5JButton {
public static void main(String[] args) {
    MyJFrame mjf = new MyJFrame("Prakhar");
    mjf.repaint();
}
}
jb1 = new JButton();
jb2 = new JButton("Green");
jb3 = new JButton("Blue");
//g.drawString("Welcome!", 100, 100);
ImageIcon img = new ImageIcon("next.png");
jb1.setIcon(img);
jb1.setToolTipText("Button 1");
this.add(jb1);
this.add(jb2);
this.add(jb3);