JAVA:简单添加菜单界面(swing)第二版

环境:jdk1.8

  1 package com.le.tool;
  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 import java.util.ArrayList;
 13 import java.util.HashMap;
 14 import java.util.List;
 15 import java.util.Map;
 16 import java.util.Map.Entry;
 17
 18 import javax.swing.JFrame;
 19 import javax.swing.JLabel;
 20 import javax.swing.JMenu;
 21 import javax.swing.JMenuBar;
 22 import javax.swing.JMenuItem;
 23 import javax.swing.JPanel;
 24 import javax.swing.JRadioButtonMenuItem;
 25
 26 import com.le.entity.MyMenu;
 27
 28 public class MenuManagerUtils {
 29
 30
 31     /**
 32      * 菜单map:<语言种类,List<菜单信息>>
 33      */
 34     private final static Map<String, List<MyMenu>> menuMap;
 35     static
 36     {
 37         List<MyMenu> orginMenu = getOrginMenuMap();
 38         menuMap = new HashMap<String, List<MyMenu>>();
 39         for (int i = 0; i < orginMenu.size(); i++) {
 40             MyMenu myMenu = orginMenu.get(i);
 41
 42             if (null == menuMap.get(myMenu.getCodeLanguage()))
 43             {
 44                 List<MyMenu> menuTemp = new ArrayList<>();
 45                 menuTemp.add(myMenu);
 46                 menuMap.put(myMenu.getCodeLanguage(), menuTemp);
 47             }
 48             else
 49             {
 50                 menuMap.get(myMenu.getCodeLanguage()).add(myMenu);
 51             }
 52         }
 53     }
 54
 55     /**
 56      * 初始化菜单数据
 57      *
 58      * @return List<MyMenu>
 59      */
 60     private static List<MyMenu> getOrginMenuMap()
 61     {
 62         List<MyMenu> menuList = new ArrayList<MyMenu>();
 63         // 此处赋初始化的数据,假数据测试
 64         for (int i = 0; i < 5; i++) {
 65             int index = i + 1;
 66             MyMenu menu = null;
 67             if (i%2==0)
 68             {
 69                 menu = new MyMenu("testFunctionName" + index, "Java" + index, "testClass" + index, "testMethod" + index,
 70                         "description" + index);
 71             }
 72             else
 73             {
 74                 menu = new MyMenu("testFunctionName" + index, "C" + index, "testClass" + index, "testMethod" + index,
 75                         "description" + index);
 76             }
 77             menuList.add(menu);
 78         }
 79         return menuList;
 80     }
 81
 82     public MenuManagerUtils() {
 83         init();
 84     }
 85
 86     public static void main(String[] args) {
 87         MenuManagerUtils menuManager = new MenuManagerUtils();
 88         menuManager.show();
 89     }
 90
 91     public void show() {
 92         for (Entry<String, List<MyMenu>> entry : menuMap.entrySet()) {
 93             System.out.println("key= " + entry.getKey() + " and value= "
 94                     + entry.getValue());
 95             List<MyMenu> menuList = entry.getValue();
 96             initMenuBar(mainFrame, menuList);
 97         }
 98
 99         mainFrame.setVisible(true);
100     }
101
102     /**
103      *
104      * 这里处理对应的ActionCommand(ActionEvent)的处理
105      *
106      */
107     class MenuItemListener implements ActionListener {
108         @Override
109         public void actionPerformed(ActionEvent e) {
110             statusLabel.setText("JMenu Item clicked:" + e.getActionCommand() + ".");
111         }
112     }
113
114     /**
115      * 给主窗口设置背景色
116      *
117      * @param mainFrame
118      *            主窗口
119      * @see 分析:JFrame默认使用流式布局管理器(FlowLayout)将整个窗体进行覆盖操作,<br>
120      *      设置的颜色被布局管理器给覆盖住了,所以无法看见。<br>
121      *      解决:在JFrame中添加一个面板容器,使得面板容器对窗体覆盖即可。<br>
122      */
123     private void initFrameBgColor(JFrame mFrame) {
124         Container pane = mFrame.getContentPane();
125         pane.setBackground(Color.orange);
126     }
127
128     /**
129      * 标题
130      */
131     private static final String MENU_MANAGER_TITILE = "Manager Tool";
132
133     private JFrame mainFrame;
134     private JLabel headerLabel;
135     private JLabel statusLabel;
136     private JPanel controlPanel;
137
138     private void init() {
139         // 主界面
140         mainFrame = new JFrame();
141         // 标题
142         mainFrame.setTitle(MENU_MANAGER_TITILE);
143         // 设置窗口大小
144         mainFrame.setSize(400, 400);
145         // 设置窗体的位置属性
146         mainFrame.setLocation(400, 200);
147         // 设置窗体关闭时退出程序(3)
148         mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
149         /*
150          * mainFrame.addWindowListener(new WindowAdapter() { public void
151          * windowClosing(WindowEvent windowEvent) { System.exit(0); } });
152          */
153         // 设置允许调整窗体大小
154         mainFrame.setResizable(true);
155         mainFrame.setLayout(new GridLayout(3, 1));
156         // 下边这种方式设置第一个Frame的背景色不生效,需要用initFrameBgColor()里的方式
157         // mainFrame.setBackground(Color.blue);
158         initFrameBgColor(mainFrame);
159
160         headerLabel = new JLabel("11", JLabel.CENTER);
161         statusLabel = new JLabel("22", JLabel.CENTER);
162         controlPanel = new JPanel();
163         controlPanel.setLayout(new FlowLayout());
164         controlPanel.setBackground(Color.gray);
165
166         mainFrame.add(headerLabel);
167         mainFrame.add(controlPanel);
168         mainFrame.add(statusLabel);
169     }
170
171     /**
172      * 初始化菜单栏
173      *
174      * @param mFrame
175      * @param myMenu
176      */
177     private void initMenuBar(JFrame mFrame, List<MyMenu> menuList) {
178         if (menuList.isEmpty()) {
179             return;
180         }
181         JMenuBar menuBar = mFrame.getJMenuBar();
182         if (null == menuBar)
183         {
184             // 创建菜单栏
185             menuBar = new JMenuBar();
186         }
187         // 创建菜单栏菜单
188         JMenu jMenu = new JMenu(menuList.get(0).getCodeLanguage());
189         for (int i = 0; i < menuList.size(); i++) {
190             MyMenu myMenu = menuList.get(i);
191             // 创建菜单栏菜单
192             // JMenu jMenu = new JMenu("功能列表" + (i + 1));
193             initJMenuItem(jMenu, myMenu);
194
195             initJRadioButtonItem(jMenu, myMenu);
196
197             menuBar.add(jMenu);
198         }
199
200         // 添加菜单栏后,下边的组件高度会被挤压变小
201         mFrame.setJMenuBar(menuBar);
202     }
203
204     /**
205      * 初始化菜单栏子项:JMenu
206      *
207      * @param menuBar
208      * @param myMenu
209      */
210     private void initJMenuItem(JMenu jMenu, MyMenu myMenu) {
211         // 创建菜单栏菜单子项
212         JMenuItem newMenuItem = new JMenuItem(myMenu.getName());
213         newMenuItem.setMnemonic(KeyEvent.VK_N);
214         newMenuItem.setActionCommand(myMenu.getName());
215         // 创建监听器
216         MenuItemListener menuItemListener = new MenuItemListener();
217         // 添加点击的动作
218         newMenuItem.addActionListener(menuItemListener);
219         jMenu.add(newMenuItem);
220     }
221
222     /**
223      * 初始化菜单栏子项:JMenu
224      *
225      * @param menuBar
226      * @param myMenu
227      */
228     private void initJRadioButtonItem(JMenu jMenu, MyMenu myMenu) {
229         // 创建菜单栏菜单子项:允许是否选中
230         final JRadioButtonMenuItem showLinksMenu = new JRadioButtonMenuItem("Show Links", true);
231         showLinksMenu.addItemListener(new ItemListener() {
232             @SuppressWarnings("static-access")
233             public void itemStateChanged(ItemEvent e) {
234                 // state,结果1表示选中,结果2表示不选中
235                 System.out.println(e.getStateChange());
236                 if (e.SELECTED == e.getStateChange())
237                 {
238                     showLinksMenu.setText("Show Link:Enable");
239                     mainFrame.repaint();
240                 }
241                 else
242                 {
243                     showLinksMenu.setText("Show Link:Disable");
244                     mainFrame.repaint();
245                 }
246                 // 创建监听器
247                 MenuItemListener menuItemListener = new MenuItemListener();
248                 // 添加点击的动作
249                 showLinksMenu.addActionListener(menuItemListener);
250             }
251         });
252         jMenu.add(showLinksMenu);
253     }
254 }

原文地址:https://www.cnblogs.com/leonlipfsj/p/10351629.html

时间: 2024-10-09 12:09:12

JAVA:简单添加菜单界面(swing)第二版的相关文章

JAVA:简单添加菜单界面(swing)

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;

java疯狂讲义笔记整理(第二版第一部分)

第一章    java语言概述 1.1    java语言的发展简史 1990末:    sun公司“Green计划”(James Gosling领导)        ----目的是智能家电编写一个通用嵌入式控制系统,为此创建oak 1992夏天:    "Green计划"完成新平台的部分功能 1992年11月:    "Green计划"被转为"FirstPerson有限公司"-一个sun的全资子公司,致力于创建一个高度互动的设备 1994夏天:

Java 简单的登陆界面

刚接触Java没多久,可能讲的比较浅显,若有不妥之处还望指正~ ······创建一个登陆界面类 类中定义显示界面的函数,类型public void 名字 (我就叫它ShowUI吧): 一个界面由许多组件组成:包含显示.装饰的图片,账号框,密码框,复选框,按钮等等,这些组件不可能是集合显示的,所以需要一个载体--也称作顶级容器或者窗体,Java中这种类型叫做JFrame(在文件javax.swing.JFrame中,这个其实不用记,如果使用eclipse,可直接将鼠标放在JFrame处,点击就可以

《Java 从入门到精通(第二版)》 观书有感

笔者今天认真试读了下此书,首先,按照笔者看书的习惯来说,喜欢先看看前面的部分.作者在前言里放了张学习java的路线图,是一个比较标准的学习流程.可是为什么在编程进阶那里放了个设计模式,然后下次才是抽象类与接口,包及访问权限(这名字和java编程思想好熟悉啊),个人认为,设计模式不应该放上来的,可能作者这里的设计模式有其它的含义吧.         全书文字和图像布局都比较合理,看着也挺舒服的.并且发现书还不是一个人写的,不由好几个不同的人共同撰写的.接下来就是目录了,从目录的结构来看,知识点很全

自己动手写一个简单的MVC框架(第二版)

一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.Web.Routing.dll中,有一个最重要的类叫做UrlRoutingModule,它是一个实现了IHttpModule接口的类,在请求处理管道中专门针对ASP.NET MVC请求进行处理.首先,我们要了解一下UrlRoutingModule是如何起作用的. (1)IIS网站的配置可以分为两个块:

JAVA简单Swing图形界面应用示例

package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗口 * @author lenovo * */ public class HelloSwing { public static void main(String[] args) { JFrame frame=new JFrame("hello Swing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLO

运用Swing以便在Java中实现简单的图形界面

Swing 是一个为 Java 设计的图形用户界面(GUI)工具包,同时也是 Java 基础类的一部分.本篇文章将运用 Swing 实现简单的图形界面,并输出 "Hello, World!"与"Welcome to Java!". HelloWorld.java 的代码如下所示: 1 import javax.swing.*; 2 3 public class HelloWorld{ 4 public static void main(String args[]){

Java甘特图控件swing版免费下载地址 &nbsp; &nbsp; &nbsp;

FlexGantt 控件是现在Java 平台下最先进的甘特图解决方案,使用一个很高的抽象层次,能适用于多种不同的域,例如 ERP 系统.生产计划和日程安排.制造流程系统或项目公文管理程序等.这些使得 FlexGantt 能从其他有局限性的项目计划(资源.人.任务)甘特图库中脱颖而出. 具体功能: 原文来自http://www.51diaodu.com/pdt/2966 模型视图控制器:FlexGantt 遵从与 Swing 相同 MVC 方法.许多不同的模型用于各种各样的用途.一个日历模型跟踪假

《Effective Java中文版第二版》读书笔记

说明 这里是阅读<Effective Java中文版第二版>的读书笔记,这里会记录一些个人感觉稍微有些重要的内容,方便以后查阅,可能会因为个人实力原因导致理解有误,若有发现欢迎指出.一些个人还不理解的会用斜线标注. 第一章是引言,所以跳过. 第二章 创建和销毁对象 第1条:考虑用静态工厂方法代替构造器 含义 静态工厂方法是指一个返回类的实例的静态方法,例如: public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE :