JAVA:简单添加菜单界面(swing)
程序员文章站
2022-05-17 16:13:17
1 package com.le.menu; 2 3 import java.awt.Color; 4 import java.awt.Container; 5 import java.awt.FlowLayout; 6 import java.awt.GridLayout; 7 import ja... ......
1 package com.le.menu; 2 3 import java.awt.color; 4 import java.awt.container; 5 import java.awt.flowlayout; 6 import java.awt.gridlayout; 7 import java.awt.event.actionevent; 8 import java.awt.event.actionlistener; 9 import java.awt.event.itemevent; 10 import java.awt.event.itemlistener; 11 import java.awt.event.keyevent; 12 13 import javax.swing.jframe; 14 import javax.swing.jlabel; 15 import javax.swing.jmenu; 16 import javax.swing.jmenubar; 17 import javax.swing.jmenuitem; 18 import javax.swing.jpanel; 19 import javax.swing.jradiobuttonmenuitem; 20 21 public class menumanagershow { 22 private menumanagershow() { 23 init(); 24 } 25 26 public static void main(string[] args) { 27 menumanagershow menumanager = new menumanagershow(); 28 menumanager.show(); 29 } 30 31 private void show() { 32 33 } 34 35 class menuitemlistener implements actionlistener { 36 @override 37 public void actionperformed(actionevent e) { 38 statuslabel.settext("jmenu item clicked:" + e.getactioncommand() + "."); 39 } 40 } 41 42 /** 43 * 给主窗口设置背景色 44 * 45 * @param mainframe 46 * 主窗口 47 * @see 分析:jframe默认使用流式布局管理器(flowlayout)将整个窗体进行覆盖操作,<br> 48 * 设置的颜色被布局管理器给覆盖住了,所以无法看见。<br> 49 * 解决:在jframe中添加一个面板容器,使得面板容器对窗体覆盖即可。<br> 50 */ 51 private void initframebgcolor(jframe mframe) { 52 container pane = mframe.getcontentpane(); 53 pane.setbackground(color.orange); 54 } 55 56 /** 57 * 标题 58 */ 59 private static final string menu_manager_titile = "manager tool"; 60 61 private jframe mainframe; 62 private jlabel headerlabel; 63 private jlabel statuslabel; 64 private jpanel controlpanel; 65 66 private void init() { 67 // 主界面 68 mainframe = new jframe(); 69 // 标题 70 mainframe.settitle(menu_manager_titile); 71 // 设置窗口大小 72 mainframe.setsize(400, 400); 73 // 设置窗体的位置属性 74 mainframe.setlocation(400, 200); 75 // 设置窗体关闭时退出程序(3) 76 mainframe.setdefaultcloseoperation(jframe.exit_on_close); 77 /* 78 * mainframe.addwindowlistener(new windowadapter() { public void 79 * windowclosing(windowevent windowevent) { system.exit(0); } }); 80 */ 81 // 设置允许调整窗体大小 82 mainframe.setresizable(true); 83 mainframe.setlayout(new gridlayout(3, 1)); 84 // 下边这种方式设置第一个frame的背景色不生效,需要用initframebgcolor()里的方式 85 // mainframe.setbackground(color.blue); 86 initframebgcolor(mainframe); 87 88 headerlabel = new jlabel("11", jlabel.center); 89 statuslabel = new jlabel("22", jlabel.center); 90 controlpanel = new jpanel(); 91 controlpanel.setlayout(new flowlayout()); 92 controlpanel.setbackground(color.gray); 93 94 mainframe.add(headerlabel); 95 mainframe.add(controlpanel); 96 mainframe.add(statuslabel); 97 98 initmenubar(mainframe); 99 100 mainframe.setvisible(true); 101 } 102 103 /** 104 * 初始化菜单栏 105 * 106 * @param mainframe 107 */ 108 private void initmenubar(jframe mframe) { 109 // 创建菜单栏 110 final jmenubar menubar = new jmenubar(); 111 112 // 创建菜单栏菜单 113 jmenu filemenu = new jmenu("file"); 114 jmenu editmenu = new jmenu("edit"); 115 final jmenu aboutmenu = new jmenu("about"); 116 final jmenu linkmenu = new jmenu("links"); 117 118 // 创建菜单栏菜单子项 119 jmenuitem newmenuitem = new jmenuitem("new"); 120 newmenuitem.setmnemonic(keyevent.vk_n); 121 newmenuitem.setactioncommand("new"); 122 123 // 创建菜单栏菜单子项:允许是否选中 124 final jradiobuttonmenuitem showlinksmenu = new jradiobuttonmenuitem("show links", true); 125 showlinksmenu.additemlistener(new itemlistener() { 126 public void itemstatechanged(itemevent e) { 127 // state,结果1表示选中,结果2表示不选中 128 // system.out.println(e.getstatechange()); 129 // 获取第三个菜单栏菜单 130 if (menubar.getmenu(3) != null) { 131 menubar.remove(linkmenu); 132 // 重新绘制主界面 133 mainframe.repaint(); 134 } else { 135 menubar.add(linkmenu); 136 mainframe.repaint(); 137 } 138 } 139 }); 140 141 // 创建监听器 142 menuitemlistener menuitemlistener = new menuitemlistener(); 143 144 // 添加点击的动作 145 newmenuitem.addactionlistener(menuitemlistener); 146 147 filemenu.add(newmenuitem); 148 filemenu.add(showlinksmenu); 149 150 menubar.add(filemenu); 151 menubar.add(editmenu); 152 menubar.add(aboutmenu); 153 menubar.add(linkmenu); 154 // 添加菜单栏后,下边的组件高度会被挤压变小 155 mframe.setjmenubar(menubar); 156 } 157 }