【问题标题】:Repaint() not working with other JPanel?Repaint() 不能与其他 JPanel 一起使用?
【发布时间】:2026-01-16 09:00:02
【问题描述】:

我正在尝试制作一个包含 2 个面板的程序,当单击第一个面板时,它会显示另一种颜色,而在第二个面板中,单词会更改为当前显示的颜色 问题是 repaint() 没有再次调用paintComponent()

class Fun extends JPanel{
public int i = 0;
A a = new A();
B b = new B();
public Fun(){
    setLayout(new GridLayout(2, 2, 10, 10));
    add(a);
    add(b);
}
public void paintComponent(Graphics g){
    setBackground(Color.WHITE);
    super.paintComponent(g);
}
class A extends JPanel implements MouseListener{
    public Color c = Color.BLUE;
    CardLayout cl = new CardLayout();
    JPanel c1 = new JPanel();
    JPanel c2 = new JPanel();
    JPanel c3 = new JPanel();
    Color[] colors = {Color.BLUE, Color.GREEN, Color.RED};
    public A(){
        addMouseListener(this);
        setLayout(cl);
        c1.setBackground(Color.BLUE);
        c2.setBackground(Color.GREEN);
        c3.setBackground(Color.RED);
        add(c1);
        add(c2);
        add(c3);
    }
    public void mouseClicked(MouseEvent e){
        cl.next(this);
        if (i==2){
            i = 0;
        }
        else{
            i++;
        }
        c = colors[i];
        new B().go();
    }
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
}
class B extends JPanel{
    JLabel l = new JLabel("Play Baby!");
    public B(){
        add(l);
    }
    public void paintComponent(Graphics g){
        System.out.println("repainted");
        A apple = new A();
        g.setColor(apple.colors[i]);
        super.paintComponent(g);
    }
    public void go(){
        repaint();
    }
}   

}

【问题讨论】:

    标签: swing jpanel paintcomponent repaint


    【解决方案1】:

    在您的mouseClicked 中,您在new B 上调用go()。但是新的 B 永远不会添加到另一个组件中。您可能想说,b.repaint(),使用定义为成员变量的 B。

    【讨论】: