我正在使用以下类将背景图像添加到JPanel。
http://www.java2s.com/Code/Java/Swing-JFC/Panelwithbackgroundimage.htm
但是当应用程序正在执行并且图像被更改时,新的更新图像不会显示在屏幕上。
Image image = new ImageIcon(path + item.getItemID() + ".png").getImage();
panel = new ImagePanel(image);
变量路径是工作空间外的静态路径。
答案 0 :(得分: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。