2014-02-07 171 views
0

我有一個擴展JFrame的類,它包含3個面板+另一個將佈局中的所有3個面板放在一起。將圖像文件設置爲背景

panel = new JPanel(); 
    panel.setLayout(new BorderLayout()); 
    panel.add("North", panel2); //row of buttons 
    panel.add("Center",grid); // grid of buttons 
    panel.add("South",panel3); // a textfield that stretches across the total width of the frame 
    add(panel); 



    JLabel background = new JLabel (new ImageIcon ("C:\\.png")); 
    background.setBounds (0,0,500,550); 
    add(background); 
    //the background for the frame 


    setVisible (true); 
    setResizable (false); 
    setBounds (398,70, 570, 620); 
    setDefaultCloseOperation (EXIT_ON_CLOSE); 

我的問題是程序讓我在的JLabel與背景圖像/影像的輸出纔可見或以某種方式掩蓋了面板/使按鈕不可見。我需要背景圖像在按鈕後面,我的意思是這就是爲什麼它被稱爲背景我錯過了什麼?

    因爲嗯,這不是馬上就會設置爲一個小程序的任何時間,我沒有使用的容器
  • IDK的,如果這個原因就足夠了,但耶

回答

1

可能達到的最簡單方法是,是簡單地讓JLabel框架的內容窗格......

JLabel background = new JLabel (new ImageIcon ("C:\\.png")); 
setContentPane(background); 

,從這個出現的下一個是事實的JLabel沒有默認的佈局管理器,製作加入您的其他內容它位difficu LT(或至少,不會導致你希望什麼),那麼接下來,你需要設置佈局管理器...

setLayout(new BorderLayout()); // Forwarded to the content pane... 

然後,您可以將您的所有內容愉快...

add(panel2, BorderLayout.NORTH); //row of buttons 
add(grid); // grid of buttons 
add(panel3, BorderLayout.SOUTH); // a textfield that 

你可能有下一個問題是,大部分組件是不透明的,所以你可能想打電話,如果你希望看到的背景要添加的組件setOpaque(false) ...

而且終於...

setVisible (true); 
setResizable (false); 

這樣會給您造成一定的問題,而是嘗試使用...

setResizable(false); 
pack(); 
setVisible(true); 

PS- JLabel不會自動調整圖像大小,但包應該幫助......假設內容與之相適應的休息在背景圖像的大小內...

+0

雖然我沒有使用容器? – user3026693

+1

JPanel是一個容器,JFrame是一個容器,JLabel是容器... – MadProgrammer

+0

從編輯到問題*「我沒有使用容器,因爲它不會被設置爲applet ..」*? !?你似乎認爲一個'容器'與它實際上是完全不同的東西。無可否認,['Applet'](http://docs.oracle.com/javase/7/docs/api/java/applet/Applet.html)確實繼承了['Container'](http:// docs。 oracle.com/javase/7/docs/api/java/awt/Container.html),但是幾乎所有在屏幕上出現在Java GUI中的其他東西(無論是嵌入式applet還是自由浮動框架)。 –