「新しい 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 を作成する必要はありません。