使用Java編寫圖形化的菜單的教程
有兩種類型的菜單:下拉式菜單和彈出式菜單。本章只討論下拉式菜單編程方法。菜單與JComboBox和JCheckBox不同,它們在界面中是一直可見的。菜單與JComboBox的相同之處是每次只可選擇一個項目。
在下拉式菜單或彈出式菜單中選擇一個選項就產(chǎn)生一個ActionEvent事件。該事件被發(fā)送給那個選項的監(jiān)視器,事件的意義由監(jiān)視器解釋。
菜單條、菜單和菜單項
下拉式菜單通過出現(xiàn)在菜單條上的名字可視化表示,菜單條(JMenuBar)通常出現(xiàn)在JFrame的頂部,一個菜單條顯示多個下拉式菜單的名字??梢杂脙煞N方式來激活下拉式菜單。一種是按下鼠標(biāo)的按鈕,并保持按下狀態(tài),移動鼠標(biāo),直至釋放鼠標(biāo)完成選擇,高亮度顯示的菜單項即為所選擇的。另一種方式是當(dāng)光標(biāo)位于菜單條中的菜單名上時,點(diǎn)擊鼠標(biāo),在這種情況下,菜單會展開,且高亮度顯示菜單項。
一個菜單條可以放多個菜單(JMenu),每個菜單又可以有許多菜單項(JMenuItem)。例如,Eclipse環(huán)境的菜單條有File、Edit、Source、Refactor等菜單,每個菜單又有許多菜單項。例如,F(xiàn)ile菜單有New、Open File、Close 、Close All等菜單項。
向窗口增設(shè)菜單的方法是:先創(chuàng)建一個菜單條對象,然后再創(chuàng)建若干菜單對象,把這些菜單對象放在菜單條里,再按要求為每個菜單對象添加菜單項。
菜單中的菜單項也可以是一個完整的菜單。由于菜單項又可以是另一個完整菜單,因此可以構(gòu)造一個層次狀菜單結(jié)構(gòu)。
1.菜單條
類JMenuBar的實例就是菜單條。例如,以下代碼創(chuàng)建菜單條對象menubar:
JMenuBar menubar = new JMenuBar();
在窗口中增設(shè)菜單條,必須使用JFrame類中的setJMenuBar()方法。例如,代碼:
setJMenuBar(menubar);
類JMenuBar的常用方法有:
- add(JMenu m):將菜單m加入到菜單條中。
- countJMenus():獲得菜單條中菜單條數(shù)。
- getJMenu(int p):取得菜單條中的菜單。
- remove(JMenu m):刪除菜單條中的菜單m。
2. 菜單
由類JMenu創(chuàng)建的對象就是菜單。類JMenu的常用方法如下:
- JMenu():建立一個空標(biāo)題的菜單。
- JMenu(String s):建立一個標(biāo)題為s的菜單。
- add(JMenuItem item):向菜單增加由參數(shù)item指定的菜單選項。
- add(JMenu menu):向菜單增加由參數(shù)menu指定的菜單。實現(xiàn)在菜單嵌入子菜單。
- addSeparator():在菜單選項之間畫一條分隔線。
- getItem(int n):得到指定索引處的菜單項。
- getItemCount():得到菜單項數(shù)目。
- insert(JMenuItem item,int n):在菜單的位置n插入菜單項item.
- remove(int n):刪除菜單位置n的菜單項
- removeAll():刪除菜單的所有菜單項。
3.菜單項
類JMenuItem 的實例就是菜單項。類JMenuItem的常用方法如下:
- JMenuItem():構(gòu)造無標(biāo)題的菜單項。
- JMenuItem(String s):構(gòu)造有標(biāo)題的菜單項。
- setEnabled(boolean b):設(shè)置當(dāng)前單項是否可被選擇。
- isEnabled():返回當(dāng)前菜單項是否可被用戶選擇。
- getLabel():得到菜單項的名稱。
- setLabel():設(shè)置菜單選項的名稱。
- addActionListener(ActionListener e):為菜單項設(shè)置監(jiān)視器。監(jiān)視器接受點(diǎn)擊某個菜單的動作事件。
4. 處理菜單事件
菜單的事件源是用鼠標(biāo)點(diǎn)擊某個菜單項。處理該事件的接口是ActionListener,要實現(xiàn)的接口方法是actionPerformed(ActionEvent e),獲得事件源的方法getSource().
【例】小應(yīng)用程序示意窗口有菜單條的實現(xiàn)方法。設(shè)有一個按鈕,當(dāng)按鈕處于打開窗口狀態(tài)時,單擊按鈕將打開一個窗口,窗口設(shè)有一個菜單條,有兩個菜單,每個菜單又各有三個菜單項。當(dāng)一個菜單項被選中時,菜單項監(jiān)視方法在文本框中顯示相應(yīng)菜單項被選中字樣。
import java.applet.* import javax.swing.*; import java.awt.*; import java.awt.event.*; class MenuWindow extends JFrame implements ActionListener{ public static JtextField text; private void addItem(JMenu Menu,String menuName,ActionListener listener){ JMenuItem anItem = new JMenuItem(menuName); anItem.setActionCommand(menuName); anItem.addActionListener(listener); Menu.add(anItem); } public MenuWindow(String s,int w,int h){ setTitle(s); Container con = this.getContentPane(); con.setLayout(new BorderLayout()); this.setLocation(100,100); this.setSize(w,h); JMenu menu1 = new JMenu("體育"); addItem(menu1," 跑步",this); addItem(menu1," 跳繩",this); addItem(menu1,"打球",this); JMenu menu2 = JMenu("娛樂"); addItem(menu2,"唱歌",this); addItem(menu2,"跳舞",this); addItem(menu2,"游戲",this); JMenuBar menubar = new JMenuBar(); text = new JTextField(); menubar.add(menu1); menubar.add(menu2); setJMenuBar(MenuBar); con.add(text,BorderLayout.NORTH); } public void actionPerformed(ActionEvent e){ text.setText(e.getActionCommand()+"菜單項被選中!"); } } public class Example6_5 extends Applet implements ActionListener{ MenuWindow window; JButton button; boolean bflg; public void init(){ button = new JButton("打開我的體育娛樂之窗");bflg =true; window = new MenuWindow("體育娛樂之窗",100,100); button.addActionListener(this); add(button); } public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ if(bflg){ window.setVisible(true); bflg = false; button.setLabel("關(guān)閉我的體育娛樂之窗"); } else{ window.setVisible(false); bflg = true; button.setLabel("打開我的體育娛樂之窗"); } } } }
5. 嵌入子菜單
創(chuàng)建了一個菜單,并創(chuàng)建多個菜單項,其中某個菜單項又是一個(含其他菜單項的)菜單,這就構(gòu)成菜單嵌套。例如,將上述程序中的有關(guān)代碼改成如下:
Menu menu1,menu2,item4; MenuItem item3,item5,item6,item41,item42;
另插入以下代碼創(chuàng)建item41和item42菜單項,并把它們加入到item4菜單中:
item41= new MenuItem(“東方紅”); item42 = new MenuItem(“牡丹”); item4.add(item41); item4.add(item42);
則點(diǎn)擊item4菜單時,又會打開兩個菜單項供選擇。
6. 向菜單增加退出項
增設(shè)一個新的菜單項,對該菜單項加入監(jiān)視,對應(yīng)的監(jiān)視方法中使用System.exit()方法,就能實現(xiàn)單擊該菜單項時退出Java運(yùn)行環(huán)境。例如,以下示意代碼:
… item7 = new MenuItem(“退出”); item7.addActionListener(this); … public void actionPerformed(ActionEvent e){ if(e.getSource()==item7){ System.exit(0); } }
7.設(shè)置菜單項的快捷鍵
用MenuShortcut類為菜單項設(shè)置快捷鍵。構(gòu)造方法是MenuShortcut(int key)。其中key可以取值KeyEvent.VK_A至KenEvent.VK_Z,也可以取 ‘a(chǎn)'到 ‘z'鍵碼值。菜單項使用setShortcut(MenuShortcut k)方法來設(shè)置快捷鍵。例如,以下代碼設(shè)置字母e為快捷鍵。
class Herwindow extends Frame implements ActionListener{ MenuBar menbar; Menu menu; MenuItem item; MenuShortcut shortcut = new MenuShortcut(KeyEvent.VK_E); … item.setShortcut(shortcut); … }
選擇框菜單項
菜單也可以包含具有持久的選擇狀態(tài)的選項,這種特殊的菜單可由JCheckBoxMenuItem類來定義。JCheckBoxMenuItem對象像選擇框一樣,能表示一個選項被選中與否,也可以作為一個菜單項加到下拉菜單中。點(diǎn)擊JCheckBoxMenuItem菜單時,就會在它的左邊出現(xiàn)打勾符號或清除打勾符號。例如,在例6.5程序的類MenuWindow中,將代碼
addItem(menu1,“跑步”,this);addItem(menu1,”跳繩”,this);
改寫成以下代碼,就將兩個普通菜單項“跑步“和“跳繩”改成兩個選擇框菜單項:
JCheckBoxMenuItem item1 = new JCheckBoxMenuItem(“跑步”); JCheckBoxMenuItem item2 = new JCheckBoxMenuItem(“跳繩”); item1.setActionCommand(“跑步”); item1.addActionListener(this); menu1.add(item1); item2.setActionCommand(“跳繩”); item2.addActionListener(this); menu1.add(item2);
相關(guān)文章
Java基于TCP協(xié)議socket網(wǎng)絡(luò)編程的文件傳送的實現(xiàn)
這篇文章主要介紹了Java基于TCP協(xié)議socket網(wǎng)絡(luò)編程的文件傳送的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Spring boot實現(xiàn)文件上傳實例(多文件上傳)
本篇文章主要介紹了Spring boot實現(xiàn)文件上傳實例(多文件上傳),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05解決springSecurity 使用默認(rèn)登陸界面登錄后無法跳轉(zhuǎn)問題
這篇文章主要介紹了解決springSecurity 使用默認(rèn)登陸界面登錄后無法跳轉(zhuǎn)問題,項目環(huán)境springboot下使用springSecurity 版本2.7.8,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-12-12Java數(shù)據(jù)結(jié)構(gòu)之快速冪的實現(xiàn)
快速冪是用來解決求冪運(yùn)算的高效方式。本文將詳細(xì)為大家介紹如何利用Java實現(xiàn)快速冪,以及利用快速冪求解冪運(yùn)算問題,需要的可以參考一下2022-03-03mybatis根據(jù)表逆向自動化生成代碼的實現(xiàn)
若采用mybatis框架,數(shù)據(jù)庫新建表,手動編寫的話,需要編寫大量的實體類、mapper文件、mapper.xml文件,都是一些重復(fù)且有規(guī)律的工作。我們可以引用插件,然后做配置,自動生成這些文件,本文就來詳細(xì)的介紹一下2021-08-08