Java?GUI編程菜單組件實(shí)例詳解
前面講解了如果構(gòu)建GUI界面,其實(shí)就是把一些GUI的組件,按照一定的布局放入到容器中展示就可以了。在實(shí)際開發(fā)中,除了主界面,還有一類比較重要的內(nèi)容就是菜單相關(guān)組件,可以通過菜單相關(guān)組件很方便的使用特定的功能,在AWT中,菜單相關(guān)組件的使用和之前學(xué)習(xí)的組件是一模一樣的,只需要把菜單條、菜單、菜單項(xiàng)組合到一起,按照一定的布局,放入到容器中即可。
下表中給出常見的菜單相關(guān)組件:
菜單組件名稱 | 功能 |
---|---|
MenuBar | 菜單條 , 菜單的容器 。 |
Menu | 菜單組件 , 菜單項(xiàng)的容器 。 它也是Menultem的子類 ,所以可作為菜單項(xiàng)使用 |
PopupMenu | 上下文菜單組件(右鍵菜單組件) |
Menultem | 菜單項(xiàng)組件 。 |
CheckboxMenuItem | 復(fù)選框菜單項(xiàng)組件 |
下圖是常見菜單相關(guān)組件集成體系圖:
菜單相關(guān)組件使用:
1.準(zhǔn)備菜單項(xiàng)組件,這些組件可以是MenuItem及其子類對(duì)象
2.準(zhǔn)備菜單組件Menu或者PopupMenu(右擊彈出子菜單),把第一步中準(zhǔn)備好的菜單項(xiàng)組件添加進(jìn)來;
3.準(zhǔn)備菜單條組件MenuBar,把第二步中準(zhǔn)備好的菜單組件Menu添加進(jìn)來;
4.把第三步中準(zhǔn)備好的菜單條組件添加到窗口對(duì)象中顯示。
小技巧:
1.如果要在某個(gè)菜單的菜單項(xiàng)之間添加分割線,那么只需要調(diào)用Menu的add(new MenuItem(-))即可。
2.如果要給某個(gè)菜單項(xiàng)關(guān)聯(lián)快捷鍵功能,那么只需要在創(chuàng)建菜單項(xiàng)對(duì)象時(shí)設(shè)置即可,例如給菜單項(xiàng)關(guān)聯(lián) ctrl+shif+/ 快捷鍵,只需要:new MenuItem("菜單項(xiàng)名字",new MenuShortcut(KeyEvent.VK_Q,true);
案例1:
?使用awt中常用菜單組件,完成下圖效果
演示代碼1:
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class SimpleMenu { //創(chuàng)建窗口 private Frame frame = new Frame("這里測試菜單相關(guān)組件"); //創(chuàng)建菜單條組件 private MenuBar menuBar = new MenuBar(); //創(chuàng)建文件菜單組件 private Menu fileMenu = new Menu("文件"); //創(chuàng)建編輯菜單組件 private Menu editMenu = new Menu("編輯"); //創(chuàng)建新建菜單項(xiàng) private MenuItem newItem = new MenuItem("新建"); //創(chuàng)建保存菜單項(xiàng) private MenuItem saveItem = new MenuItem("保存"); //創(chuàng)建退出菜單項(xiàng) private MenuItem exitItem = new MenuItem("退出"); //創(chuàng)建自動(dòng)換行選擇框菜單項(xiàng) private CheckboxMenuItem autoWrap = new CheckboxMenuItem("自動(dòng)換行"); //創(chuàng)建復(fù)制菜單項(xiàng) private MenuItem copyItem = new MenuItem("復(fù)制"); //創(chuàng)建粘貼菜單項(xiàng) private MenuItem pasteItem = new MenuItem("粘貼"); //創(chuàng)建格式菜單 private Menu formatMenu = new Menu("格式"); //創(chuàng)建注釋菜單項(xiàng) private MenuItem commentItem = new MenuItem("注釋"); //創(chuàng)建取消注釋菜單項(xiàng) private MenuItem cancelItem = new MenuItem("取消注釋"); //創(chuàng)建一個(gè)文本域 private TextArea ta = new TextArea(6, 40); public void init(){ //定義菜單事件監(jiān)聽器 ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); ta.append("單擊“"+command+"”菜單\n"); if (command.equals("退出")){ System.exit(0); } } }; //為注釋菜單項(xiàng)和退出菜單項(xiàng)注冊(cè)監(jiān)聽器 commentItem.addActionListener(listener); exitItem.addActionListener(listener); //為文件菜單fileMenu添加菜單項(xiàng) fileMenu.add(newItem); fileMenu.add(saveItem); fileMenu.add(exitItem); //為編輯菜單editMenu添加菜單項(xiàng) editMenu.add(autoWrap); editMenu.add(copyItem); editMenu.add(pasteItem); //為格式化菜單formatMenu添加菜單項(xiàng) formatMenu.add(commentItem); formatMenu.add(cancelItem); //將格式化菜單添加到編輯菜單中,作為二級(jí)菜單 editMenu.add(new MenuItem("-")); editMenu.add(formatMenu); //將文件菜單和編輯菜單添加到菜單條中 menuBar.add(fileMenu); menuBar.add(editMenu); //把菜單條設(shè)置到frame窗口上 frame.setMenuBar(menuBar); //把文本域添加到frame中 frame.add(ta); //設(shè)置frame最佳大小并可見 frame.pack(); frame.setVisible(true); } public static void main(String[] args) { new SimpleMenu().init(); } }
案例2:
?通過PopupMenu實(shí)現(xiàn)下圖效果:
實(shí)現(xiàn)思路:
1.創(chuàng)建PopubMenu菜單組件;
2.創(chuàng)建多個(gè)MenuItem菜單項(xiàng),并添加到PopupMenu中;
3.將PopupMenu添加到目標(biāo)組件中;
4.為需要右擊出現(xiàn)PopubMenu菜單的組件,注冊(cè)鼠標(biāo)監(jiān)聽事件,當(dāng)監(jiān)聽到用戶釋放右鍵時(shí),彈出菜單。
演示代碼2:
import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class PopupMenuTest { private Frame frame = new Frame("這里測試PopupMenu"); // 創(chuàng)建PopubMenu菜單 private PopupMenu popupMenu = new PopupMenu(); // 創(chuàng)建菜單條 private MenuItem commentItem = new MenuItem("注釋"); private MenuItem cancelItem = new MenuItem("取消注釋"); private MenuItem copyItem = new MenuItem("復(fù)制"); private MenuItem pasteItem = new MenuItem("保存"); // 創(chuàng)建一個(gè)文本域 private TextArea ta = new TextArea("我愛中華?。。?, 6, 40); // 創(chuàng)建一個(gè)Panel private Panel panel = new Panel(); public void init() { // 把菜單項(xiàng)添加到PopupMenu中 popupMenu.add(commentItem); popupMenu.add(cancelItem); popupMenu.add(copyItem); popupMenu.add(pasteItem); // 設(shè)置panel大小 panel.setPreferredSize(new Dimension(300, 100)); // 把PopupMenu添加到panel中 panel.add(popupMenu); // 為panel注冊(cè)鼠標(biāo)事件 panel.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { boolean flag = e.isPopupTrigger(); // 判斷當(dāng)前鼠標(biāo)操作是不是觸發(fā)PopupMenu的操作 if (flag) { // 讓PopupMenu顯示在panel上,并且跟隨鼠標(biāo)事件發(fā)生的地方顯示 popupMenu.show(panel, e.getX(), e.getY()); } } }); // 把ta添加到frame中間區(qū)域中 frame.add(ta); // 把panel添加到frame底部 frame.add(panel, BorderLayout.SOUTH); // 設(shè)置frame最佳大小,并可視; frame.pack(); frame.setVisible(true); } public static void main(String[] args) { new PopupMenuTest().init(); } }
公眾號(hào)本文地址:https://mp.weixin.qq.com/s/wTmc9O0aDtf_NPSis37-2A
到此這篇關(guān)于Java GUI編程菜單組件實(shí)例詳解的文章就介紹到這了,更多相關(guān)Java GUI編程菜單內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
教你利用SpringBoot寫一個(gè)屬于自己的Starter
如果我們將可獨(dú)立于業(yè)務(wù)代碼之外的功配置模塊封裝成一個(gè)個(gè)starter,復(fù)用的時(shí)候只需要將其在pom中引用依賴即可,SpringBoot為我們完成自動(dòng)裝配,簡直不要太爽,這篇文章主要給大家介紹了關(guān)于如何利用SpringBoot寫一個(gè)屬于自己的Starter,需要的朋友可以參考下2022-03-03SpringBoot處理JSON數(shù)據(jù)方法詳解
這篇文章主要介紹了SpringBoot整合Web開發(fā)中Json數(shù)據(jù)處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-10-10springboot單文件下載和多文件壓縮zip下載的實(shí)現(xiàn)
這篇文章主要介紹了springboot單文件下載和多文件壓縮zip下載的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11更簡單更高效的Mybatis?Plus最新代碼生成器AutoGenerator
這篇文章主要為大家介紹了更簡單更高效的Mybatis?Plus最新代碼生成器AutoGenerator使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02maven繼承父工程統(tǒng)一版本號(hào)的實(shí)現(xiàn)
這篇文章主要介紹了maven繼承父工程統(tǒng)一版本號(hào)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08maven?插件?assembly?打tar.gz包的詳細(xì)過程
這篇文章主要介紹了maven插件assembly打tar.gz包的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06Java利用布隆過濾器實(shí)現(xiàn)快速檢查元素是否存在
布隆過濾器是一個(gè)很長的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。布隆過濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中。本文就來詳細(xì)說說實(shí)現(xiàn)的方法,需要的可以參考一下2022-10-10java實(shí)現(xiàn)題目以及選項(xiàng)亂序的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)題目以及選項(xiàng)亂序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03