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

跟我學 Java Swing 遊戲開發 (4):JDialog 進階、模態視窗、HTML 標籤應用

     編輯:Java 程式設計入門

上一節回顧

已完成遊戲主介面骨架:系統選單、遊戲區、使用者互動區。本節進行「精裝修」:打造專業級對話框、掌握模態/非模態視窗、在元件上使用 HTML 標籤豐富顯示效果。

JDialog:增強型對話框視窗

JOptionPane 適合簡單訊息,但長文本、複雜佈局、自訂元件時力不從心。JDialog 與 JFrame 同屬頂層容器,用法近似 JPanel,支援完整佈局管理器。

範例:自訂「關於」對話框

public class AboutDialog extends JDialog {
    JLabel about = new JLabel("關於:這可是 Java 寫的連連看哦!");

    public AboutDialog(JFrame owner) {
        super(owner, "About", true); // 模態對話框
        setSize(320, 200);
        setLocationRelativeTo(owner); // 相對父視窗置中
        about.setHorizontalAlignment(SwingConstants.CENTER);
        getContentPane().add(about, BorderLayout.CENTER);
        
        // 關閉按鈕(使用 Java 外觀時右上角 X 會隱藏)
        JButton closeBtn = new JButton("關閉");
        closeBtn.addActionListener(e -> dispose());
        JPanel btnPanel = new JPanel();
        btnPanel.add(closeBtn);
        getContentPane().add(btnPanel, BorderLayout.SOUTH);
        
        setVisible(true);
    }
}

主程式調用

if (e.getSource() == aboutMenuItem) {
    new AboutDialog(mainFrame);
    return;
}

視覺升級技巧

// 啟用 Java 觀感裝飾(更美觀,但原生標題列消失)
JDialog.setDefaultLookAndFeelDecorated(true);

代價: 原生關閉按鈕消失,必須自行添加「關閉」按鈕與事件處理。

漂亮的 JDialog 對話框範例
圖 1:自訂外觀的模態對話框

黃金知識點:模態 vs 非模態視窗

類型行為典型範例構造方式
模態阻塞父視窗交互,必須關閉才能操作其他視窗字體設定、關鍵確認對話框new JDialog(owner, true) 或 setModal(true)
非模態不阻塞父視窗,可同時操作多個視窗尋找/替換對話框、工具面板new JDialog(owner, false) 或 setModal(false)

Windows 記事本:「字體」= 模態,「尋找」= 非模態。

在 Swing 元件上使用 HTML 標籤

絕大多數 Swing 元件(JLabel、JButton、JTabbedPane 標籤、JToolTip、JTable 儲存格等)支援 HTML 3.2 子集渲染:

支援標籤速查

  • 文字格式:<b>、<i>、<u>、<font color="red" size="+2">
  • 段落/換行:<p>、<br>、<center>
  • 列表:<ul><li>、<ol><li>
  • 表格:<table><tr><td>(簡易)
  • 圖片:<img src="...">(需實現 ImageIcon 載入)

實戰範例

JLabel richLabel = new JLabel(
    "" +
    "

遊戲規則

" + "
    " + "
  • 使用方向鍵移動
  • " + "
  • 吃到食物加分
  • " + "
  • 撞牆或撞到自己遊戲結束
  • " + "
" + "
祝您遊戲愉快!
" + "" ); richLabel.setHorizontalAlignment(SwingConstants.CENTER);

注意事項

  1. 必須以 <html> 開頭啟用 HTML 渲染引擎。
  2. HTML 渲染比純文字慢,大量元件使用時注意效能。
  3. 不支援 CSS、JavaScript、HTML5 標籤(<video>、<canvas> 等)。
  4. 行高、字體度量與純文字模式不同,佈局需實測調整。

本節小結

  • JDialog 替代 JOptionPane 實現專業級對話框。
  • setDefaultLookAndFeelDecorated(true) 提升視覺質感,代價是需自行實現關閉按鈕。
  • 模態/非模態選擇取決於業務流程阻塞需求。
  • HTML 標籤讓文字元件具備富文本表達能力,零成本提升 UI 質感。

下一節預告

善用 Graphics 繪製圖形、實現遊戲動畫核心迴圈、雙緩衝技術消除閃爍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved