需求:
創建多級菜單
步驟:
A:創建窗體對象(並設置屬性和布局)
B:創建菜單欄
C:創建菜單和子菜單
D:逐步添加菜單(子菜單添加到菜單中,菜單添加到菜單欄中)
E:窗體中設置菜單欄(菜單欄並不是添加,而是設置)
F:設置各個菜單對應的監聽事件
G:設置窗體關閉監聽時間
H:設置顯示窗口
代碼:
1 public class FrameText4 { 2 3 public static void main(String[] args) { 4 5 // 創建窗體對象 6 final Frame f = new Frame("多級菜單"); 7 // 設置窗體屬性 8 f.setBounds(300, 300, 500, 500); 9 f.setLayout(new FlowLayout()); 10 11 //獲取原來的標題 12 final String str = f.getTitle(); 13 14 // 創建菜單欄 15 MenuBar m = new MenuBar(); 16 17 // 創建菜單 18 Menu m1 = new Menu("操作"); 19 Menu m2 = new Menu("更改標題"); 20 21 // 創建子菜單 22 final MenuItem mi1 = new MenuItem("N級菜單"); 23 final MenuItem mi2 = new MenuItem("M級菜單"); 24 MenuItem mi3 = new MenuItem("恢復標題"); 25 MenuItem mi4 = new MenuItem("退出"); 26 MenuItem mi5 = new MenuItem("打開記事本"); 27 28 // 逐步添加 29 // 子菜單添加到菜單中 30 m2.add(mi1); 31 m2.add(mi2); 32 m2.add(mi3); 33 m1.add(m2); 34 m1.add(mi5); 35 m1.add(mi4); 36 37 // 菜單添加到菜單欄中 38 m.add(m1); 39 40 // 窗體中設置菜單欄 41 f.setMenuBar(m); 42 43 // 設置各個菜單對應的監聽事件 44 mi1.addActionListener(new ActionListener() { 45 46 public void actionPerformed(ActionEvent e) { 47 // 更改標題欄的名稱 48 // 為了以后方便修改,首先獲取mi1菜單的名稱,再進行更改 49 f.setTitle(mi1.getLabel()); 50 // 把窗口的標題名稱改為mi1的標簽 51 } 52 }); 53 54 mi2.addActionListener(new ActionListener(){ 55 56 public void actionPerformed(ActionEvent e) { 57 //如mil1 58 f.setTitle(mi2.getLabel()); 59 } 60 61 }); 62 63 mi3.addActionListener(new ActionListener(){ 64 //這個跟上面2個有所不同,因為是恢復原來的標題。 65 //所以得在前面創建個字符串得到開始的標題,然后直接拿來更改就可以 66 public void actionPerformed(ActionEvent e) { 67 f.setTitle(str); 68 } 69 }); 70 71 //退出系統 72 mi4.addActionListener(new ActionListener(){ 73 74 public void actionPerformed(ActionEvent e) { 75 //退出系統 76 System.exit(0); 77 } 78 79 }); 80 81 //打開記事本 82 mi5.addActionListener(new ActionListener(){ 83 84 public void actionPerformed(ActionEvent e) { 85 //Runtime 使應用程序能夠與其運行的環境相連接 86 //public static Runtime getRuntime()返回與當前 Java 應用程序相關的運行時對象。 87 //public Process exec(String command)在單獨的進程中執行指定的字符串命令。 88 89 Runtime r = Runtime.getRuntime(); 90 try { 91 r.exec("notepad"); 92 } catch (IOException e1) { 93 // TODO Auto-generated catch block 94 e1.printStackTrace(); 95 } 96 97 } 98 99 }); 100 101 //設置窗口關閉監聽事件 102 f.addWindowListener(new WindowAdapter(){ 103 public void windowClosing(WindowEvent e) { 104 System.exit(0); 105 } 106 }); 107 108 //使窗體顯示 109 f.setVisible(true); 110 } 111 112 }