改变另一个jpanel的颜色

HAD*_*DEV 2 java swing background colors jpanel

我有一个由两个组成的框架 JPanels

Panel1 包含一个按钮,当单击该按钮时,我希望面板2的颜色改变并变为红色,但这不会发生

所以任何有关如何从另一个面板更改面板颜色的帮助和解释

 public class MyForm extends JFrame {
            public MyForm() {
    // TODO Auto-generated constructor stub
    super();
    // setLayout(new FlowLayout());
    Panel1 panel1 = new Panel1();
    add(panel1, BorderLayout.NORTH);

    Panel2 panel2 = new Panel2();
    add(panel2, BorderLayout.CENTER);
}

class Panel1 extends JPanel {

    public Panel1() {
        // TODO Auto-generated constructor stub

        JButton btn = new JButton("Change Color");
        add(btn);
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                System.out.println("Sqsq");
                Panel2 panel2 = new Panel2();
                panel2.setBackground(Color.red);
                panel2.repaint();

            }
        });
    }
}

class Panel2 extends JPanel {
    public Panel2() {
        // TODO Auto-generated constructor stub
        super();
        setBackground(Color.black);

    }

    @Override
    protected void paintComponent(Graphics g) {
        // TODO Auto-generated method stub
        super.paintComponent(g);
    }
}

public static void main(String[] args) {
    MyForm form = new MyForm();
    // form.setLocationRelativeTo(null);
    form.setSize(500, 500);
    form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    form.setVisible(true);

}
 }
Run Code Online (Sandbox Code Playgroud)

Mad*_*mer 6

首先,在你的btn actionPerformed方法中,你创建的是一个新的 Panel2,它与添加到框架中的引用不同,因此,什么都不会改变......

您需要传递Panel1和引用要更新的组件...

class Panel1 extends JPanel {

    private JComponent changeMe;

    public Panel1(JComponent changeMe) {
        this.changeMe = changeMe;
        // TODO Auto-generated constructor stub

        JButton btn = new JButton("Change Color");
        add(btn);
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                System.out.println("Sqsq");
                if (changeMe != null) {
                    changeMe.setBackground(Color.red);
                    changeMe.repaint();
                }

            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

您可能需要请求重新绘制父容器,但请查看它是如何进行的...