日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

18、Java Swing JMenu和JPopupMenu:菜单和弹出式菜单

發(fā)布時(shí)間:2025/3/20 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 18、Java Swing JMenu和JPopupMenu:菜单和弹出式菜单 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

菜單由 Swing 中的 JMenu 類實(shí)現(xiàn),可以包含多個(gè)菜單項(xiàng)和帶分隔符的菜單。

在菜單中,菜單項(xiàng)由 JMenuItem 類表示,分隔符由 JSeparator 類表示。

菜單本質(zhì)上是帶有關(guān)聯(lián) JPopupMenu 的按鈕。當(dāng)按下“按鈕”時(shí),就會(huì)顯示 JPopupMenu。
如果“按鈕”位于 JMenuBar 上,則該菜單為頂層窗口。
如果“按鈕”是另一個(gè)菜單項(xiàng),則 JPopupMenu 就是“下拉”菜單。

JMenu 類的常用方法

創(chuàng)建菜單常用構(gòu)造方法有兩個(gè):JMenu() 和 JMenu(String s)。
第一個(gè)構(gòu)造方法創(chuàng)建一個(gè)無文本的 JMenu 對(duì)象,
第二個(gè)構(gòu)造方法創(chuàng)建一個(gè)帶有指定文本的 JMenu 對(duì)象。JMenu 類的常用方法如表 1 所示。

JMenu類的常用方法

  • add(Action a)---- 創(chuàng)建連接到指定 Action 對(duì)象的新菜單項(xiàng),并將其追加到此菜單的末尾
  • add(Component c)---- 將某個(gè)組件追加到此菜單的末尾
  • add(Component c,int index) ----將指定組件添加到此容器的給定位置
  • add(JMenuItem menultem)---- 將某個(gè)菜單項(xiàng)追加到此菜單的末尾
  • add(String s) ----創(chuàng)建具有指定文本的新菜單項(xiàng),并將其追加到此菜單的末尾
  • addSeparator()---- 將新分隔符追加到菜單的末尾
  • doCliclc(int pressTime) ----以編程方式執(zhí)行“單擊”操作
  • getDelay() ----返回子菜單向上或向下彈出前建議的延遲(以毫秒為單位)
  • getltem(int pos) ----返回指定位置的 JMenuItem
  • getItemCount()---- 返回菜單上的項(xiàng)數(shù),包括分隔符
  • getMenuComponent(int n)---- 返回位于位置 n 的組件
  • getMenuComponents()---- 返回菜單子組件的 Component 數(shù)組
  • getSubElements()---- 返回由 MenuElement 組成的數(shù)組,其中包含此菜單組件的子菜單
  • insert(JMenuItem mi,int pos) ----在給定位置插入指定的 JMenuitem
  • insert(String s,pos)---- 在給定位置插入具有指定文本的新菜單項(xiàng)
  • insertSeparator(int index) ----在指定的位置插入分隔符
  • isMenuComponent(Component c) ----如果在子菜單層次結(jié)構(gòu)中存在指定的組件,則返回 true
  • isPopupMenuVisible()---- 如果菜單的彈出窗口可見,則返回 rue
  • isSelected() 如果菜單是當(dāng)前選擇的----(即高亮顯示的)菜單,則返回 true
  • isTopLevelMenu()---- 如果菜單是“頂層菜單”(即菜單欄的直接子級(jí)),則返回 true
  • setDelay(int d)---- 設(shè)置菜單的 PopupMenu 向上或向下彈出前建議的延遲
  • setMenuLocation(int x,int y) ----設(shè)置彈出組件的位置
  • setPopupMenuVisible(boolean b)---- 設(shè)置菜單彈出的可見性
  • setSelected(boolean b)---- 設(shè)置菜單的選擇狀態(tài)

例 1
菜單如果依附到 JMenuBar 對(duì)象上,則此菜單就是菜單欄中的菜單。

菜單如果依附在 JPopupMenu 對(duì)象上,此菜單就是彈出式菜單。

實(shí)現(xiàn)菜單欄和彈出式菜單的原理是一樣的,但在具體的實(shí)現(xiàn)方式上有一些區(qū)別。

下面編寫一個(gè)案例,使用 JMenuBar 類創(chuàng)建一個(gè)包含“文件”菜單和“編輯”菜單的菜單窗口。主要實(shí)現(xiàn)代碼如下:

import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; public class JMenuDemo1 extends JMenuBar {public JMenuDemo1(){add(createFileMenu()); //添加“文件”菜單add(createEditMenu()); //添加“編輯”菜單setVisible(true);}public static void main(String[] agrs){JFrame frame=new JFrame("菜單欄");frame.setSize(300,200);frame.setJMenuBar(new JMenuDemo1());frame.setVisible(true);}//定義“文件”菜單private JMenu createFileMenu(){JMenu menu=new JMenu("文件(F)");menu.setMnemonic(KeyEvent.VK_F); //設(shè)置快速訪問符JMenuItem item=new JMenuItem("新建(N)",KeyEvent.VK_N);item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK));menu.add(item);item=new JMenuItem("打開(O)",KeyEvent.VK_O);item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));menu.add(item);item=new JMenuItem("保存(S)",KeyEvent.VK_S);item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));menu.add(item);menu.addSeparator();item=new JMenuItem("退出(E)",KeyEvent.VK_E);item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,ActionEvent.CTRL_MASK));menu.add(item);return menu;}//定義“編輯”菜單private JMenu createEditMenu(){JMenu menu=new JMenu("編輯(E)");menu.setMnemonic(KeyEvent.VK_E);JMenuItem item=new JMenuItem("撤銷(U)",KeyEvent.VK_U);item.setEnabled(false);menu.add(item);menu.addSeparator();item=new JMenuItem("剪貼(T)",KeyEvent.VK_T);menu.add(item);item=new JMenuItem("復(fù)制(C)",KeyEvent.VK_C);menu.add(item);menu.addSeparator();JCheckBoxMenuItem cbMenuItem=new JCheckBoxMenuItem("自動(dòng)換行");menu.add(cbMenuItem);return menu;} }

上述代碼調(diào)用 JMenu 對(duì)象的 setMnemonic() 方法設(shè)置當(dāng)前菜單的快速訪問符。

該符號(hào)必須對(duì)應(yīng)鍵盤上的一個(gè)鍵,并且應(yīng)該使用 java.awt.event.KeyEvent 中定義的 VK—XXX 鍵代碼之一指定。

提示:快速訪問符是一種快捷鍵,通常在按下 Alt 鍵和某個(gè)字母時(shí)激活。例如,常用的 Alt+F 是“文件” 菜單的快速訪問符。

JMenuItem 類實(shí)現(xiàn)的是菜單中的菜單項(xiàng)。菜單項(xiàng)本質(zhì)上是位于列表中的按鈕。當(dāng)用戶單擊“按鈕”時(shí),則執(zhí)行與菜單項(xiàng)關(guān)聯(lián)的操作

JMenuItem 的常用構(gòu)造方法:

  • JMenuItem(String text):創(chuàng)建帶有指定文本的 JMenuItem。
  • JMenuItem(String text,Icon icon):創(chuàng)建帶有指定文本和圖標(biāo)的 JMenuItem。
  • JMenuItem(String text,int mnemonic):創(chuàng)建帶有指定文本和鍵盤助記符的 JMenuItem。

在該實(shí)例中,創(chuàng)建菜單項(xiàng)后調(diào)用 JMenuItem 對(duì)象的 setAccelerator(KeyStroke) 方法來設(shè)置修改鍵,它能直接調(diào)用菜單項(xiàng)的操作監(jiān)聽器而不必顯示菜單的層次結(jié)構(gòu)。在本實(shí)例中沒有實(shí)現(xiàn)事件監(jiān)聽機(jī)制,所以使用快捷鍵時(shí)將得不到程序的任何響應(yīng),但是在菜單項(xiàng)中將出現(xiàn)快捷鍵。

運(yùn)行該實(shí)例,圖 1 所示是“文件”菜單展開效果,圖 2 所示是“編輯”菜單展開的效果。

彈出式菜單 JPopuMenu

彈出式菜單由 JPopupMenu 類實(shí)現(xiàn),它是一個(gè)可彈出并顯示一系列選項(xiàng)的小窗口。

它還用于當(dāng)用戶選擇菜單項(xiàng)并激活它時(shí)顯示的“右拉式(pull-right)”菜單,可以在想讓菜單顯示的任何其他位置使用。例如,當(dāng)用戶在指定區(qū)域中右擊時(shí)。

JPopMenu類的常用方法:

  • getInvoker()---- 返回作為此彈出菜單的“調(diào)用者”的組件
  • setInvoker(Component invoker)---- 設(shè)置彈出菜單的調(diào)用者,即彈出菜單在其中顯示的組件
  • addPopupMenuListener(PopupMenuListener1)---- 添加 PopupMenu 監(jiān)聽器
  • removePopupMenuListener(PopupMenuListener1)---- 移除 PopupMenu 監(jiān)聽器
  • getPopupMenuListeners()---- 返回利用 addPopupMenuListener()添加到此 JMenuitem 的所有PopupMenuListener 組成的數(shù)組
  • getLabel() ----返回彈出菜單的標(biāo)簽
  • setLabel(String label) ----設(shè)置彈出菜單的標(biāo)簽
  • show(Component invoker,int x,int y)---- 在調(diào)用者的坐標(biāo)空間中的位置 X、Y 處顯示彈出菜單
  • getComponentIndex(Component c) ----返回指定組件的索引

例 2
使用 JPopupMenu 類創(chuàng)建一個(gè)彈出式菜單,并在菜單中使用子菜單。主要實(shí)現(xiàn)代碼如下:

import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JRadioButtonMenuItem; public class JPopupMenuDemo extends JFrame {JMenu fileMenu;JPopupMenu jPopupMenuOne;//表示可以在組件內(nèi)的指定位置動(dòng)態(tài)彈出的菜單JMenuItem openFile,closeFile,exit;//JMenuItem類表示菜單中的項(xiàng)JRadioButtonMenuItem copyFile,pasteFile;//JRadioButtonMenuItem類表示可以包含在菜單中的復(fù)選框ButtonGroup buttonGroupOne;public JPopupMenuDemo(){jPopupMenuOne=new JPopupMenu(); //創(chuàng)建jPopupMenuOne對(duì)象buttonGroupOne=new ButtonGroup();//創(chuàng)建文件菜單及子菜單,并將子菜單添加到文件菜單中fileMenu=new JMenu("文件");openFile=new JMenuItem("打開");closeFile=new JMenuItem("關(guān)閉");fileMenu.add(openFile);fileMenu.add(closeFile);//將fileMenu菜單添加到彈出式菜單中jPopupMenuOne.add(fileMenu);//添加分割符jPopupMenuOne.addSeparator();//創(chuàng)建單選菜單項(xiàng),并添加到ButtonGroup對(duì)象中copyFile=new JRadioButtonMenuItem("復(fù)制");pasteFile=new JRadioButtonMenuItem("粘貼");buttonGroupOne.add(copyFile);buttonGroupOne.add(pasteFile);//將copyFile添加到j(luò)PopupMenuOne中jPopupMenuOne.add(copyFile);//將pasteFile添加到j(luò)PopupMenuOne中jPopupMenuOne.add(pasteFile);jPopupMenuOne.addSeparator();exit=new JMenuItem("退出");//將exit添加到j(luò)PopupMenuOne中jPopupMenuOne.add(exit);//創(chuàng)建監(jiān)聽器對(duì)象MouseListener popupListener=new PopupListener(jPopupMenuOne);//向主窗口注冊(cè)監(jiān)聽器this.addMouseListener(popupListener);this.setTitle("彈出式菜單");this.setBounds(100,100,250,150);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String args[]){new JPopupMenuDemo();}//添加內(nèi)部類,其擴(kuò)展了MouseAdapter類,用來處理鼠標(biāo)事件class PopupListener extends MouseAdapter{JPopupMenu popupMenu;PopupListener(JPopupMenu popupMenu){this.popupMenu=popupMenu;}public void mousePressed(MouseEvent e){showPopupMenu(e);}public void mouseReleased(MouseEvent e){showPopupMenu(e);}private void showPopupMenu(MouseEvent e){if(e.isPopupTrigger()){//如果當(dāng)前事件與鼠標(biāo)事件相關(guān),則彈出菜單popupMenu.show(e.getComponent(),e.getX(),e.getY());}}} }

在使用彈出菜單時(shí)一定要注意層次關(guān)系和菜單的位置。程序運(yùn)行后由于菜單沒有被激活所以窗口是空白的,如圖 1 所示。單擊鼠標(biāo)右鍵即可查看彈出式菜單,如圖 2 所示。

總結(jié)

以上是生活随笔為你收集整理的18、Java Swing JMenu和JPopupMenu:菜单和弹出式菜单的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。