欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 }