在 Swing 應用中為 JFrame 設置背景圖片是常見需求,關鍵在於利用分層面板 JLayeredPane 將圖片標籤置於最底層,並將內容面板設置為透明。下面分步驟講解完整實現。
java.awt.*、javax.swing.*。JFrame frame = new JFrame(); frame.setVisible(true);ImageIcon img = new ImageIcon("E:\\1.gif"); JLabel imgLabel = new JLabel(img);frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
Container cp = frame.getContentPane(); cp.setLayout(new BorderLayout()); ((JPanel) cp).setOpaque(false); // 透明,讓底層圖片顯示出來
package 第八章;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MyFirstFrame extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
MyFirstFrame frame = new MyFirstFrame();
frame.setVisible(true);
// 背景圖片 7 行核心代碼
ImageIcon img = new ImageIcon("E:\\1.gif");
JLabel imgLabel = new JLabel(img);
frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
Container cp = frame.getContentPane();
cp.setLayout(new BorderLayout());
((JPanel) cp).setOpaque(false);
}
public MyFirstFrame() {
super();
setTitle("利用 JFrame 類創建的窗體");
setBounds(100, 100, 315, 320);
getContentPane().setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
\\ 或正斜杠 /。setOpaque(false),否則不透明面板會遮蓋背景。Integer.MIN_VALUE 確保圖片在最底層。ComponentAdapter 動態調整 imgLabel 大小。