首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java Swing JFrame 窗口配置全攻略:標題、尺寸、居中、圖標、背景、關閉操作

     編輯:Java 綜合教學

Java Swing JFrame 窗口配置全攻略:從零構建專業桌面應用界面

JFrame 是 Swing 應用的主窗口容器。本文通過完整示例代碼,系統講解窗口標題、尺寸、屏幕居中、圖標設置、背景顏色/圖片、關閉行為、可調整大小等核心配置技巧。

一、完整示例代碼


package w160412.wang.main;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class GUI {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JAVA_GUI_DEMO");

        // 1. 設置尺寸
        frame.setSize(500, 400);

        // 2. 屏幕居中(必須在 setSize 之後調用)
        frame.setLocationRelativeTo(null);

        // 3. 設置窗口圖標(左上角)
        ImageIcon img = new ImageIcon("image/java.png");
        frame.setIconImage(img.getImage());
        // 等價:frame.setIconImage(Toolkit.getDefaultToolkit().createImage("image/1.png"));

        // 4. 設置背景顏色(需作用於 ContentPane)
        frame.getContentPane().setBackground(new Color(204, 255, 204));

        // 5. 設置背景圖片(使用 JLabel 鋪滿 ContentPane)
        Container con = frame.getContentPane();
        JLabel bgLabel = new JLabel(new ImageIcon(
            Toolkit.getDefaultToolkit().createImage("image/chutian.jpg")
        ));
        bgLabel.setBounds(0, 0, bgLabel.getWidth(), bgLabel.getHeight());
        frame.add(bgLabel); // 默認添加到 ContentPane 的 LayeredPane 層

        // 6. 關閉操作:退出 JVM
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 7. 禁止用戶拖動邊框調整大小
        frame.setResizable(false);

        // 8. 顯示窗口
        frame.setVisible(true);
    }
}

二、核心配置詳解

需求方法/屬性關鍵點
設置標題setTitle(String)構造器或後續調用均可
設置尺寸setSize(w, h) / setPreferredSize先設尺寸再居中,否則居中失效
屏幕居中setLocationRelativeTo(null)JDK 1.4+ 一行搞定,內部自動計算屏幕與窗口尺寸
窗口圖標setIconImage(Image)需 ImageIcon.getImage() 或 Toolkit.createImage() 獲取 Image 對象
背景顏色getContentPane().setBackground(Color)直接 frame.setBackground() 無效,因 JFrame 由 RootPane/ContentPane 組成
背景圖片JLabel + setBounds + add()JLabel 放圖片,鋪滿 ContentPane;或重寫 paintComponent 繪製
關閉退出setDefaultCloseOperation(EXIT_ON_CLOSE)其他選項:HIDE_ON_CLOSE, DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE
固定大小setResizable(false)禁止最大化/拖動邊框

三、JFrame 內部結構速查

JFrame 由四層組成(由外向內):

  1. RootPane:整個窗口的根容器,管理玻璃窗格、分層窗格、內容窗格。
  2. LayeredPane:分層容器,支持組件 Z 軸疊加(如彈出菜單、工具提示)。
  3. ContentPane:實際放置業務組件的容器,add() 默認添加到此處,背景顏色必須設置在這裡。
  4. GlassPane:透明玻璃窗格,可攔截事件、繪製全屏遮罩。

口訣:組件加到 ContentPane,背景塗在 ContentPane,彈出層在 LayeredPane,全屏攔截用 GlassPane。

四、手動計算居中坐標(理解原理)


Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
int x = (screen.width - frameSize.width) / 2;
int y = (screen.height - frameSize.height) / 2;
frame.setLocation(x, y);

等同於 setLocationRelativeTo(null)。注意:必須先 setSize 再 setLocation。

五、常見坑點避雷

  • 圖片路徑:相對路徑基於「工作目錄」(IDE 運行通常是項目根目錄),建議用 getClass().getResource() 加載 classpath 資源。
  • 背景圖片不顯示:JLabel 需設置 setOpaque(false) 且大小覆蓋 ContentPane,或使用 setLayout(null) 絕對定位。
  • ContentPane 不可見:getContentPane().setVisible(false) 會隱藏所有業務組件,慎用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved