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

Java AWT 選單實作完全指南:選單列、子選單、核取選單項、動態切換與事件處理

     編輯:Java 相關知識

選單架構限制

  • 僅限 Frame 應用程式,Applet 無法直接擁有選單列 (無 setMenuBar())
  • 解決方案:Applet 建立 Frame 並在其中放置選單
  • 四種選單元件:MenuBar、Menu、MenuItem、CheckboxMenuItem

完整範例:Menu1 — 多層選單、核取項、動態切換選單列

//: Menu1.java
import java.awt.*;

public class Menu1 extends Frame {
    String[] flavors = {"Chocolate","Strawberry","Vanilla Fudge Swirl","Mint Chip",
                        "Mocha Almond Fudge","Rum Raisin","Praline Cream","Mud Pie"};
    TextField t = new TextField("No flavor", 30);

    MenuBar mb1 = new MenuBar(), mb2 = new MenuBar();
    Menu f = new Menu("File"), m = new Menu("Flavors"), s = new Menu("Safety");
    CheckboxMenuItem[] safety = {new CheckboxMenuItem("Guard"), new CheckboxMenuItem("Hide")};
    MenuItem[] file = {new MenuItem("Open"), new MenuItem("Exit")};
    Menu fooBar = new Menu("fooBar");
    MenuItem[] other = {new MenuItem("Foo"), new MenuItem("Bar"), new MenuItem("Baz")};
    Button b = new Button("Swap Menus");

    public Menu1() {
        // Flavors 選單動態建構
        for (int i=0; i

關鍵技術點深度解析

1. 動態建構選單

使用陣列 + 迴圈建構選單項,而非手寫重複 add(),便於維護增刪項目。

2. 核取選單項

  • 繼承 MenuItem,自動處理核取狀態切換
  • 不支援字串比對 (arg 無效),必須用 evt.target.equals(menuItemRef) 比對物件
  • getState()/setState(boolean) 讀寫狀態

3. 子選單

Menu 可加入另一個 Menu 形成子選單 (範例中 Safety 掛在 File 下)。

4. 選單分隔線

m.addSeparator() 插入視覺分隔,提升可讀性。

5. 選單快捷鍵

Java 1.1 新增:new MenuItem("Exit", new MenuShortcut(KeyEvent.VK_E)) 設定 Ctrl+E 快捷鍵,自動顯示於選單項旁。

6. 動態切換選單列

getMenuBar() 取得目前選單列,setMenuBar(newBar) 即時切換,展示選單列可動態替換特性。

7. 字串比對陷阱

arg.equals("Open") 依賴標籤文字,修改語言/拼寫即失效。最佳實踐:setActionCommand("cmd_open") 設定不變命令字串,程式碼檢查 e.getActionCommand(),支援國際化 (i18n)。

8. 選單項不可重複加入多選單列

嘗試將同一 Menu 加入兩個 MenuBar 會導致異常行為,每個選單項只能屬於單一父容器。

現代化對應

技術核心類別關鍵差異
SwingJMenuBar, JMenu, JMenuItem, JCheckBoxMenuItem支援圖示、快捷鍵、動作 (Action) 共用邏輯、鍵盤導航、外觀可換膚
JavaFXMenuBar, Menu, MenuItem, CheckMenuItemFXML 宣告式、CSS 樣式、屬性綁定、Accelerator 快捷鍵、ContextMenu 右鍵選單

最佳實踐總結

  1. 選單結構用資料驅動 (陣列/清單/JSON) 動態建構,避免硬編碼。
  2. 命令字串 (setActionCommand) 分離顯示文字與程式邏輯,支援多語系。
  3. 核取選單項務必用物件參考比對事件來源。
  4. 共用邏輯提煉為 Action (Swing) 或 EventHandler (JavaFX) 實現複用。
  5. Applet 時代已過,但「選單屬於視窗、非瀏覽器標籤」的架構觀念延伸至現代單頁應用的導航設計。

選單看似簡單,實則是應用程式功能架構的地圖,設計良好的選單系統能大幅降低使用者認知負荷。

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