如果你“用新的 JPanel 更新 JPanel”,你不是在“更新”,你正在创建一个新的 JPanel。例如,我们有一个名为“panelTest”的绿色 JPanel:
panelTest = new JPanel();
panelTest.setBackground(Color.green);
add(panelTest);
现在我们有一个按钮,可以将 JPanel 背景颜色从绿色更改为红色,但方式错误:
JButton btnTest = new JButton("Test");
btnTest.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
panelTest = new JPanel(); //woops, now we have 2 panels...
panelTest.setBackground(Color.red);
}
});
请注意,这panelTest
是一个指向绿色面板的指针,现在它指向一个带有红色背景的新 JPanel。这个新的 JPanel 尚未添加到任何容器中,因此不会显示。旧的绿色面板将保持可见。
更新图像的最佳方法是在 ImagePanel 中创建一个方法,例如:
public void setImage( Image image ) {
this.img = image;
this.repaint();
}
这样你就不必为了改变背景而创建一个新的 ImagePanel。