Java-GUI程式設計之選單元件

愚生淺末發表於2022-04-07

前面講解了如果構建GUI介面,其實就是把一些GUI的元件,按照一定的佈局放入到容器中展示就可以了。在實際開發中,除了主介面,還有一類比較重要的內容就是選單相關元件,可以通過選單相關元件很方便的使用特定的功能,在AWT中,選單相關元件的使用和之前學習的元件是一模一樣的,只需要把選單條、選單、選單項組合到一起,按照一定的佈局,放入到容器中即可。

Java-GUI程式設計之選單元件

下表中給出常見的選單相關元件:

選單元件名稱 功能
MenuBar 選單條 , 選單的容器 。
Menu 選單元件 , 選單項的容器 。 它也是Menultem的子類 ,所以可作為選單項使用
PopupMenu 上下文選單元件(右鍵選單元件)
Menultem 選單項元件 。
CheckboxMenuItem 核取方塊選單項元件

下圖是常見選單相關元件整合體系圖:

Java-GUI程式設計之選單元件

選單相關元件使用:

1.準備選單項元件,這些元件可以是MenuItem及其子類物件

2.準備選單元件Menu或者PopupMenu(右擊彈出子選單),把第一步中準備好的選單項元件新增進來;

3.準備選單條元件MenuBar,把第二步中準備好的選單元件Menu新增進來;

4.把第三步中準備好的選單條元件新增到視窗物件中顯示。

小技巧:

1.如果要在某個選單的選單項之間新增分割線,那麼只需要呼叫Menu的add(new MenuItem(-))即可。

2.如果要給某個選單項關聯快捷鍵功能,那麼只需要在建立選單項物件時設定即可,例如給選單項關聯 ctrl+shif+/ 快捷鍵,只需要:new MenuItem("選單項名字",new MenuShortcut(KeyEvent.VK_Q,true);

案例1:

​ 使用awt中常用選單元件,完成下圖效果

Java-GUI程式設計之選單元件

演示程式碼1:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SimpleMenu {
    //建立視窗
    private Frame frame = new Frame("這裡測試選單相關元件");
    //建立選單條元件
    private MenuBar menuBar = new MenuBar();
    //建立檔案選單元件
    private Menu fileMenu = new Menu("檔案");
    //建立編輯選單元件
    private Menu editMenu = new Menu("編輯");
    //建立新建選單項
    private MenuItem newItem = new MenuItem("新建");
    //建立儲存選單項
    private MenuItem saveItem = new MenuItem("儲存");
    //建立退出選單項
    private MenuItem exitItem = new MenuItem("退出");

    //建立自動換行選擇框選單項
    private CheckboxMenuItem autoWrap = new CheckboxMenuItem("自動換行");

    //建立複製選單項
    private MenuItem copyItem = new MenuItem("複製");

    //建立貼上選單項
    private MenuItem pasteItem = new MenuItem("貼上");

    //建立格式選單
    private Menu formatMenu = new Menu("格式");

    //建立註釋選單項
    private MenuItem commentItem = new MenuItem("註釋");
    //建立取消註釋選單項
    private MenuItem cancelItem = new MenuItem("取消註釋");

    //建立一個文字域
    private TextArea ta = new TextArea(6, 40);

    public void init(){
        //定義選單事件監聽器
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String command = e.getActionCommand();
                ta.append("單擊“"+command+"”選單\n");
                if (command.equals("退出")){
                    System.exit(0);
                }
            }
        };
        //為註釋選單項和退出選單項註冊監聽器
        commentItem.addActionListener(listener);
        exitItem.addActionListener(listener);

        //為檔案選單fileMenu新增選單項
        fileMenu.add(newItem);
        fileMenu.add(saveItem);
        fileMenu.add(exitItem);

        //為編輯選單editMenu新增選單項
        editMenu.add(autoWrap);
        editMenu.add(copyItem);
        editMenu.add(pasteItem);

        //為格式化選單formatMenu新增選單項
        formatMenu.add(commentItem);
        formatMenu.add(cancelItem);

        //將格式化選單新增到編輯選單中,作為二級選單
        editMenu.add(new MenuItem("-"));
        editMenu.add(formatMenu);


        //將檔案選單和編輯選單新增到選單條中
        menuBar.add(fileMenu);
        menuBar.add(editMenu);


        //把選單條設定到frame視窗上
        frame.setMenuBar(menuBar);

        //把文字域新增到frame中
        frame.add(ta);

        //設定frame最佳大小並可見
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        new SimpleMenu().init();
    }
}

案例2:

​ 通過PopupMenu實現下圖效果:

Java-GUI程式設計之選單元件

實現思路:

1.建立PopubMenu選單元件;

2.建立多個MenuItem選單項,並新增到PopupMenu中;

3.將PopupMenu新增到目標元件中;

4.為需要右擊出現PopubMenu選單的元件,註冊滑鼠監聽事件,當監聽到使用者釋放右鍵時,彈出選單。

演示程式碼2:

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class PopupMenuTest {
    private Frame frame = new Frame("這裡測試PopupMenu");
    // 建立PopubMenu選單
    private PopupMenu popupMenu = new PopupMenu();
    // 建立選單條
    private MenuItem commentItem = new MenuItem("註釋");
    private MenuItem cancelItem = new MenuItem("取消註釋");
    private MenuItem copyItem = new MenuItem("複製");
    private MenuItem pasteItem = new MenuItem("儲存");
    // 建立一個文字域
    private TextArea ta = new TextArea("我愛中華!!!", 6, 40);
    // 建立一個Panel
    private Panel panel = new Panel();

    public void init() {
        // 把選單項新增到PopupMenu中
        popupMenu.add(commentItem);
        popupMenu.add(cancelItem);
        popupMenu.add(copyItem);
        popupMenu.add(pasteItem);
        // 設定panel大小
        panel.setPreferredSize(new Dimension(300, 100));
        // 把PopupMenu新增到panel中
        panel.add(popupMenu);
        // 為panel註冊滑鼠事件
        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                boolean flag = e.isPopupTrigger();
                // 判斷當前滑鼠操作是不是觸發PopupMenu的操作
                if (flag) {
                    // 讓PopupMenu顯示在panel上,並且跟隨滑鼠事件發生的地方顯示
                    popupMenu.show(panel, e.getX(), e.getY());
                }
            }
        });
        // 把ta新增到frame中間區域中

        frame.add(ta);

        // 把panel新增到frame底部
        frame.add(panel, BorderLayout.SOUTH);

        // 設定frame最佳大小,並可視;
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new PopupMenuTest().init();
    }

}

公眾號本文地址:https://mp.weixin.qq.com/s/wTmc9O0aDtf_NPSis37-2A

個人部落格:https://kohler19.gitee.io/
公眾號:愚生淺末

相關文章