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)
首先,在你的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)
您可能需要请求重新绘制父容器,但请查看它是如何进行的...
| 归档时间: |
|
| 查看次数: |
1430 次 |
| 最近记录: |