2013-03-11 50 views
2

我正在使用以下类将背景图像添加到JPanel。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

尝试'panel.repaint()'图像更改后。另外,你如何改变图像?你是否在创建一个新的ImagePanel? – TheBronx 2013-03-11 08:40:04

+0

尝试了这一点,并通过用新的JPanel更新JPanel。但获得相同的旧图像。 在涂料中手动更改图像 – Kidaaaa 2013-03-11 08:44:30

+0

另外,如果图像从路径中删除,则应用程序会将图像显示为JPanel背景 – Kidaaaa 2013-03-11 08:49:28

回答

1

如果您“使用新JPanel更新JPanel”,那么您不是“更新”,您是创建一个新的JPanel。 例如,我们有一个绿色的JPanel称为“panelTest”:

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只是改变了背景。

+0

我不仅创建新的JPanel,而且父框架JInternalFrame也是新建的。 – Kidaaaa 2013-03-11 11:04:36

+0

ok @Kidaaaa为什么不分享一些代码,以便我们可以看到问题出在哪里? – TheBronx 2013-03-11 11:05:56