2

JPanel に背景画像を追加するために、次のクラスを使用しています。

http://www.java2s.com/Code/Java/Swing-JFC/Panelwithbackgroundimage.htm

ただし、アプリケーションの実行中に画像が変更されると、新しく更新された画像は画面に表示されません。

    Image image = new ImageIcon(path + item.getItemID() + ".png").getImage();
    panel = new ImagePanel(image);

変数パスは、ワークスペース外の静的パスです。

4

1 に答える 1

1

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

于 2013-03-11T08:58:48.117 に答える