Java中的高級圖形用戶界面就是菜單、表格、多文檔界面
——菜單
菜單窗口分為兩類:常規菜單窗口和彈出式菜單窗口
常規菜單窗口的試圖如下:
常規菜單窗口有三部分組成:
1、所以常規菜單由: 菜單欄 (JMenuBar) 、下拉式菜單(JMenu) 、 和 菜單項 組成;
2、菜單項又分成
命令式菜單項(JMenuItem) 這是最常用的一個菜單項
復選式菜單項(JCheckBoxMenuItem)
單選式菜單項(JRadioButtonMenuItem)
3、構建常規菜單窗口的一般步驟是:
創建容器——在容器中添加一個菜單欄——在菜單欄中添加數個下拉式菜單——在每個下拉式菜單中添加數個菜單項
所以可以預見這些菜單欄和下拉式菜單實際上就是一種容器,到最后我們可以知道實際上我們也可以將其他的下拉式菜單作為“菜單項”,構建多級菜單窗口
4、我們把菜單系統的結構圖介紹一下
6、分析:
①創建菜單欄——public JMenuBar() ;
②在頂層容器中設置菜單欄
像JFrame、JDialog、JApplet 頂層容器中都有設置菜單欄的方法
public void setJMenuBar(JMenuBar menubar) ;
這樣一來就相當於在當前的窗口中添加了菜單欄
③在菜單欄中添加下拉式菜單
JMenuBar類中有成員方法:
public JMenu add(JMenu menu) ;
④在下拉式菜單中添加其他的下拉式菜單或者菜單項
JMenu類中有成員方法:
public JMenuItem add(JMenuItem menuItem) ;
由前面的菜單系統圖可以知道由於JMenuBar是JMenuItem的
子類,所以我們不僅能夠將命令式菜單項(或其他不常用的菜單項)
作為菜單項,還能夠將其他的下拉式菜單作為“菜單項”;這樣一來就能
夠創建多級菜單但我們將下拉式菜單作為“菜單項”時,在對應的項中
就會出現小的三角箭頭:
⑤JMenuItem類的構造方法:
public JMenuItem(String text) ;
public JMenuItem(Icon icon) ;
public JMenuItem(String text , Icon icon) ;
public JMenuItem(String text , Icon icon , int mnemonic) ;
其中參數mnemonic指定了創建的菜單項的助記符,助記符都是
字符型的,但是這個構造方法中的參數是int型的,即需要知道,字符的
Unicode編碼,這一點問題沒有,因為int和char能夠進行隱含的轉換
所以在使用這個構造方法時,可以直接用形如‘a’這樣的字符作為
mnemonic
⑥助記符設置
菜單項和下拉式菜單都可以擁有助記符,如果菜單項或者下拉式菜單中有
設定的助記符中的字符的話,在菜單項或下拉式菜單中的那個字符的下面
就會自動的添加一條下划線;一旦我們為某個菜單項或者下拉式菜單設定了
助記符,那么我們就能夠通過使用“Alt 鍵+ 助記符鍵”使下拉式菜單展開
或者執行菜單項所對應的命令;
菜單項和下拉式菜單都有設置助記符的方法:
public void setMnemonic(char mnemonic);
public void setMnemonic(int mnemonic) ;
注意:有些操作系統不支持助記符功能,還有一個問題是,在給
小應用程序添加助記符時,可能會與瀏覽器本身的助記符發生沖突,
因此,要謹慎一些
⑦快捷鍵的設置
如果需要可以給菜單項設置快捷鍵(雖然JMenu繼承自JMenuItem,
但是JMenu對象是不能夠設置快捷鍵的,這是有道理的,因為下拉菜
單並不是執行什么命令)在JMenuItem的成員方法中有專門用於設置
快捷鍵的方法:
public void setAccelerator(KeyStroke keyStroke) ;
參數keyStroke所定義的按鍵或者按鍵組合就是該菜單項的快捷鍵
快捷鍵由javax.swing.KeyStroke類的實例對象定義,但是我們可以利用
這個類中的靜態方法 :
public static KeyStroke getKeyStroke(char key) ;
public static KeyStroke getKeyStroke(String s) ;
來獲得KeyStroke對象,非常的簡便,其中參數的格式非常的重要
格式:
①方法一種參數是單個char字母 , 但是這個字母必須是大寫字母
這個大寫字母就作為才菜單項的快捷鍵
②方法二中參數是字符串s, 字符串 s 必須由三部分組成
“修飾詞”+ 空格 + “大寫字母” ;
比如:“ctrl”+“ ”+“S” ;(或者是“ctrl ” + “S”) ;
這樣一來就將ctrl+S作為了該菜單項的快捷鍵了;
現在再看看上面的實例程序就會發現,有錯誤,應該將mC[][]中的小寫
字母改成大寫字母,否則是不會創建快捷鍵的;
但是助記符是不區分大小寫的,也就說大寫小寫都一樣
當我們將實例中的程序改正后就有這樣的運行結果:
⑧實現菜單項的命令或操作事件處理
與相應的按鈕事件處理一樣,我們從系統圖中可以看到
菜單項是javax.swing.AbstractButton的子類,也就說,實際上
菜單項就是按鈕,那么事件處理機制就和JButton是一樣的
⑨菜單分隔條
在菜單項之間我們可以加上一個菜單分隔條,為的是能夠更加清晰的區分
菜單項,菜單分隔條實際上就是下圖中open和save之間的一條線
在JMenu中有方法用來為當期的下拉式菜單下屬的各個菜單項之間
添加菜單分隔條,而不是在JMenuItem中;
public void insertSeparator(int index) ;
index的值指定了分隔條添加的位置,從0開始
——彈出式菜單
①彈出式菜單類是javax.swing.JPopupMenu類,所謂的彈出式菜單
就是我們在許多軟件中單擊右鍵是彈出的菜單,比如在桌面上單擊右鍵
出現的菜單;跟常規菜單不同的是,彈出式菜單並需要在容器中設置什么
菜單欄,我們只需要創建一個javax.swing.JPopupMenu類的實例對象
之后要做的是,當我們在某個容器中點擊鼠標右鍵時,
調用javax.swing.JPopupMenu的成員方法show(參數);就能夠將
菜單彈出來這就行了
②所以創建彈出式菜單的過程為:
創建JPopupMenu實例對象——向實例對象中添加菜單項JMenuItem
或者下拉式菜單JMenu——在容器中添加鼠標監聽器——當在容器中單擊
右鍵時,調用實例對象的show()方法,將菜單顯示出來
③下面通過一個實例來顯示這個過程
程序的最終結果為:
④分析:
1、JPopupMenu成員方法:
public JMenuItem add(JMenuItem menuItem) ;
所以可以將下拉式菜單作為“菜單項”
2、一般不為彈出式菜單項添加快捷鍵,因為如果添加了快捷鍵的話,只有當
菜單項展開時,才能夠使用快捷鍵,這已經失去了意義
——表格JTable和多文檔界面的內容以后再講