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

Java AWT 對話框設計完全指南:從基礎 Dialog 到檔案選擇對話框實戰

     編輯:Java 相關知識

Dialog 核心特性

  • 從現有視窗彈出的次級視窗,處理特定任務不干擾主視窗
  • 繼承 Dialog 類別,擁有版面配置管理器 (預設 BorderLayout)
  • 無法擁有選單列、無法改變游標,其餘與 Frame 相似
  • 關鍵差異:WINDOW_DESTROY 事件應呼叫 dispose() 釋放資源,而非 System.exit() 結束整個應用程式

經典範例:井字遊戲對話框

// ToeTest.java 核心結構
class ToeButton extends Canvas {
    int state = ToeDialog.BLANK;
    ToeDialog parent; // 持有父對話框參考
    ToeButton(ToeDialog parent) { this.parent = parent; }
    public void paint(Graphics g) { ... 畫格子、X、O ... }
    public boolean mouseDown(Event evt, int x, int y) {
        if (state == BLANK) state = parent.turn;
        else state = (state == XX ? OO : XX);
        parent.turn = (parent.turn == XX ? OO : XX);
        repaint(); return true;
    }
}

class ToeDialog extends Dialog {
    static final int BLANK=0, XX=1, OO=2;
    int turn = XX;
    public ToeDialog(Frame parent, int w, int h) {
        super(parent, "The game itself", false); // false = 非模態
        setLayout(new GridLayout(w, h));
        for (int i=0; i

設計要點解析

1. 緊密耦合 vs 靜態共享

ToeButton 持有 ToeDialog 參考存取 turn,形成緊密耦合。替代方案:turn 設為 static,但會限制同時只能有一個遊戲實例正常運行。教學中為簡化邏輯接受耦合,實務中應透過介面/事件總線解耦。

2. 繪圖邏輯

paint() 計算幾何座標繪製格子與 X/O,純手工繪圖,現代開發建議使用 Swing JButton + Icon 或 JavaFX Button + Graphic 替代。

3. 事件處理

Java 1.0 模型:覆寫 mouseDown()、handleEvent()。Java 1.1+ 應改用 MouseListener/MouseAdapter。

4. 模態 vs 非模態

super(parent, title, true);  // 模態:阻塞父視窗輸入,show() 才返回
super(parent, title, false); // 非模態:雙視窗並行運作

範例使用非模態,允許主視窗操作時對話框開啟。

檔案對話框

FileDialog 封裝作業系統原生開啟/儲存對話框,Applet 受沙箱限制無法使用。

開啟檔案模式

FileDialog d = new FileDialog(this, "What file do you want to open?");
d.setFile("*.java");      // 檔名過濾 (支援萬用字元視作業系統)
d.setDirectory(".");      // 起始目錄
d.show();                 // 阻塞直到關閉
String file = d.getFile();
if (file != null) { /* 使用者選擇檔案 */ }
else { /* 使用者取消 */ }

儲存檔案模式

FileDialog d = new FileDialog(this, "Save as?", FileDialog.SAVE);
// 其他相同

現代化替代方案

技術核心類別優勢
SwingJDialog, JFileChooser, JOptionPane跨平台一致外觀、豐富元件、可嵌入任意元件、支援預覽/過濾器
JavaFXDialog<R>, FileChooser, Alert現代 UI、FXML 宣告式、CSS 樣式、屬性綁定、非阻塞 showAndWait() 回傳 Optional

最佳實踐總結

  1. 對話框專責單一任務,避免塞入過多邏輯。
  2. 模態用於必須完成的關鍵流程 (登入、確認刪除);非模態用於輔助工具 (調色盤、屬性檢視)。
  3. 資源釋放務必呼叫 dispose(),避免原生資源洩漏。
  4. 父視窗參考傳遞給 super(parent, ...) 確保對話框居中顯示、圖示關聯正確。
  5. 優先使用 Swing/JavaFX 高階對話框 API,減少手工繪圖與事件處理。

掌握 Dialog 設計精髓,能讓你的桌面應用程式互動流程更清晰、使用者體驗更專業。

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