2015-06-06 19 views
0

我有一個包含幾個J組件的JPanel,問題是如果我用下面的代碼設置了一個背景圖像,它會覆蓋所有組件作爲屏幕截圖顯示,我怎麼能修理它?設置一個圖像作爲保持組件前面的前景Java

private ImageIcon imagen; 
private Image camiones; 

public PanelInicio(){ 
    imagen = new ImageIcon("imagenes/imagenprincipal.jpg"); 
    camiones=imagen.getImage(); 
} 

public void paint(Graphics g){ 
    super.paint(g); 
    g.drawImage(camiones, 0, 0, this.getWidth(), this.getHeight(), this); 
} 

截圖:

-JPanel沒有背景enter image description here

-JPanel沒有背景(唯一的組件可見是JTextField的,因爲它有重點就可以了)enter image description here

+0

我認爲[的Java™教程,使用頂層容器,根窗格(http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html):_」分層窗格[...]啓用其他組件的Z排序「_和[如何使用分層窗格](http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html)可能有幫助。 –

回答

0

我我總是有幸運用這個在內容面板上創建背景圖片;我注意到我的類重寫paintComponent(),其中你的重寫paint()。不知道這是否與衆不同。

class ImageBackgroundPanel extends JPanel { 
     BufferedImage image; 

     ImageBackgroundPanel(BufferedImage image) { 
      this.image = image; 
     } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, this); 
    } 
} 


public class Gui extends JFrame 
{ 

    ImageBackgroundPanel content; 

    public Gui() 
    { 
     BufferedImage img = null; 
     try { 
      img = ImageIO.read(new File(<path to the file "imagenprincipal.jpg">)); 
     } catch (IOException e) { 
    } 
    content = new ImageBackgroundPanel(img); 
. 
. 
相關問題