2013-03-11 52 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