首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Swing 繪製背景圖片失效排查:paint 方法陷阱與 JLabel 替代方案

     編輯:程式設計疑難解答

問題代碼

public void paint(Graphics g) {
    g.drawImage(background, 0, 20, this); // 直接在 JFrame 繪圖
}

失效原因

  • JFrame 是重量級容器,其 paint 繪製順序複雜,易被子組件覆蓋。
  • 未調用 super.paint(g) 導致邊框、標題欄異常。
  • 未啟用雙緩衝,閃爍嚴重。

推薦方案:JLabel + Icon

JLabel bgLabel = new JLabel(new ImageIcon(background));
bgLabel.setBounds(0, 0, 500, 500);
getLayeredPane().add(bgLabel, JLayeredPane.FRAME_CONTENT_LAYER);
// 或
setContentPane(new JPanel() {
    @Override protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(background, 0, 0, getWidth(), getHeight(), this);
    }
});

關鍵點

  1. 在 JPanel 重寫 paintComponent 而非 paint。
  2. 調用 super.paintComponent(g) 保證背景清除與雙緩衝。
  3. 使用 JLayeredPane 分層,背景標籤置底。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved