終於成功實現了如何為jframe視窗設定背景圖片了。下面是樣本,請初學swring的朋友們參考學習。
import java.awt.*; import javax.swing.*; import java.awt.Container; public class framebg { public framebg() { } public static void main (String[] args) { JFrame frame=new JFrame("背景圖設定"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ImageIcon img = new ImageIcon("bg//1.gif");//這是背景圖片 JLabel imgLabel = new JLabel(img);//將背景圖放在標籤裡。 frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意這裡是關鍵,將背景標籤添加到jfram的LayeredPane面板裡。 imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//設定背景標籤的位置 Container cp=frame.getContentPane(); cp.setLayout(new BorderLayout()); JButton but=new JButton("anniu");//建立按鈕 cp.add(but,"North");//將按鈕添加入視窗的內容面板 ((JPanel)cp).setOpaque(false); //注意這裡,將內容面板設為透明。這樣LayeredPane面板中的背景才能顯示出來。 frame.setSize(500,300); frame.setVisible(true); } }
通過為jframe設定背景圖片,讓我明白了以下的知識要點:
(1)jframe視窗的組成部分,最底層是jrootpane面板。(這一點恐怕很多初學者都沒有注意吧。)
(2)jframe的組成如下:
jrootpane中包含glasspane和layeredpane兩個面板。而layeredpane面板包含contentpane和jmenubar。(沒想到吧contentpane是放在contentpane中的。)
(3)在jframe上添加組件,往往是添加在contentpane中。。但是在contentpane的下面還有兩層面板,那就是layeredpane和jrootpane。
(4)任何一本關於java的書中都會介紹contentpane,卻很少提到layeredpane和jrootpane,因此使得很多的初學者產生:jframe中只要一個contentpane的錯誤認識。
通過解決背景設定的問題,讓我對jframe中容器的“層”結構,有個更深層的瞭解。
以上知識點,希望初學swing的朋友們注意。
ok!只是共分享。讓我們共同學習進步。