环境:jdk1.8

 package com.le.tool;

 import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem; import com.le.entity.MyMenu; public class MenuManagerUtils { /**
* 菜单map:<语言种类,List<菜单信息>>
*/
private final static Map<String, List<MyMenu>> menuMap;
static
{
List<MyMenu> orginMenu = getOrginMenuMap();
menuMap = new HashMap<String, List<MyMenu>>();
for (int i = 0; i < orginMenu.size(); i++) {
MyMenu myMenu = orginMenu.get(i); if (null == menuMap.get(myMenu.getCodeLanguage()))
{
List<MyMenu> menuTemp = new ArrayList<>();
menuTemp.add(myMenu);
menuMap.put(myMenu.getCodeLanguage(), menuTemp);
}
else
{
menuMap.get(myMenu.getCodeLanguage()).add(myMenu);
}
}
} /**
* 初始化菜单数据
*
* @return List<MyMenu>
*/
private static List<MyMenu> getOrginMenuMap()
{
List<MyMenu> menuList = new ArrayList<MyMenu>();
// 此处赋初始化的数据,假数据测试
for (int i = 0; i < 5; i++) {
int index = i + 1;
MyMenu menu = null;
if (i%2==0)
{
menu = new MyMenu("testFunctionName" + index, "Java" + index, "testClass" + index, "testMethod" + index,
"description" + index);
}
else
{
menu = new MyMenu("testFunctionName" + index, "C" + index, "testClass" + index, "testMethod" + index,
"description" + index);
}
menuList.add(menu);
}
return menuList;
} public MenuManagerUtils() {
init();
} public static void main(String[] args) {
MenuManagerUtils menuManager = new MenuManagerUtils();
menuManager.show();
} public void show() {
for (Entry<String, List<MyMenu>> entry : menuMap.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= "
+ entry.getValue());
List<MyMenu> menuList = entry.getValue();
initMenuBar(mainFrame, menuList);
} mainFrame.setVisible(true);
} /**
*
* 这里处理对应的ActionCommand(ActionEvent)的处理
*
*/
class MenuItemListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
statusLabel.setText("JMenu Item clicked:" + e.getActionCommand() + ".");
}
} /**
* 给主窗口设置背景色
*
* @param mainFrame
* 主窗口
* @see 分析:JFrame默认使用流式布局管理器(FlowLayout)将整个窗体进行覆盖操作,<br>
* 设置的颜色被布局管理器给覆盖住了,所以无法看见。<br>
* 解决:在JFrame中添加一个面板容器,使得面板容器对窗体覆盖即可。<br>
*/
private void initFrameBgColor(JFrame mFrame) {
Container pane = mFrame.getContentPane();
pane.setBackground(Color.orange);
} /**
* 标题
*/
private static final String MENU_MANAGER_TITILE = "Manager Tool"; private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel; private void init() {
// 主界面
mainFrame = new JFrame();
// 标题
mainFrame.setTitle(MENU_MANAGER_TITILE);
// 设置窗口大小
mainFrame.setSize(400, 400);
// 设置窗体的位置属性
mainFrame.setLocation(400, 200);
// 设置窗体关闭时退出程序(3)
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*
* mainFrame.addWindowListener(new WindowAdapter() { public void
* windowClosing(WindowEvent windowEvent) { System.exit(0); } });
*/
// 设置允许调整窗体大小
mainFrame.setResizable(true);
mainFrame.setLayout(new GridLayout(3, 1));
// 下边这种方式设置第一个Frame的背景色不生效,需要用initFrameBgColor()里的方式
// mainFrame.setBackground(Color.blue);
initFrameBgColor(mainFrame); headerLabel = new JLabel("11", JLabel.CENTER);
statusLabel = new JLabel("22", JLabel.CENTER);
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
controlPanel.setBackground(Color.gray); mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
mainFrame.add(statusLabel);
} /**
* 初始化菜单栏
*
* @param mFrame
* @param myMenu
*/
private void initMenuBar(JFrame mFrame, List<MyMenu> menuList) {
if (menuList.isEmpty()) {
return;
}
JMenuBar menuBar = mFrame.getJMenuBar();
if (null == menuBar)
{
// 创建菜单栏
menuBar = new JMenuBar();
}
// 创建菜单栏菜单
JMenu jMenu = new JMenu(menuList.get(0).getCodeLanguage());
for (int i = 0; i < menuList.size(); i++) {
MyMenu myMenu = menuList.get(i);
// 创建菜单栏菜单
// JMenu jMenu = new JMenu("功能列表" + (i + 1));
initJMenuItem(jMenu, myMenu); initJRadioButtonItem(jMenu, myMenu); menuBar.add(jMenu);
} // 添加菜单栏后,下边的组件高度会被挤压变小
mFrame.setJMenuBar(menuBar);
} /**
* 初始化菜单栏子项:JMenu
*
* @param menuBar
* @param myMenu
*/
private void initJMenuItem(JMenu jMenu, MyMenu myMenu) {
// 创建菜单栏菜单子项
JMenuItem newMenuItem = new JMenuItem(myMenu.getName());
newMenuItem.setMnemonic(KeyEvent.VK_N);
newMenuItem.setActionCommand(myMenu.getName());
// 创建监听器
MenuItemListener menuItemListener = new MenuItemListener();
// 添加点击的动作
newMenuItem.addActionListener(menuItemListener);
jMenu.add(newMenuItem);
} /**
* 初始化菜单栏子项:JMenu
*
* @param menuBar
* @param myMenu
*/
private void initJRadioButtonItem(JMenu jMenu, MyMenu myMenu) {
// 创建菜单栏菜单子项:允许是否选中
final JRadioButtonMenuItem showLinksMenu = new JRadioButtonMenuItem("Show Links", true);
showLinksMenu.addItemListener(new ItemListener() {
@SuppressWarnings("static-access")
public void itemStateChanged(ItemEvent e) {
// state,结果1表示选中,结果2表示不选中
System.out.println(e.getStateChange());
if (e.SELECTED == e.getStateChange())
{
showLinksMenu.setText("Show Link:Enable");
mainFrame.repaint();
}
else
{
showLinksMenu.setText("Show Link:Disable");
mainFrame.repaint();
}
// 创建监听器
MenuItemListener menuItemListener = new MenuItemListener();
// 添加点击的动作
showLinksMenu.addActionListener(menuItemListener);
}
});
jMenu.add(showLinksMenu);
}
}

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

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

    package com.le.menu; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; i ...

  2. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http:// ...

  3. Java简单登录图形界面

    本文参考与:https://blog.csdn.net/wyf2017/article/details/78831744 https://blog.csdn.net/MengKun822/articl ...

  4. 一套简单的web即时通讯——第二版

    前言 接上一版,这一版的页面与功能都有所优化,具体如下: 1.优化登录拦截 2.登录后获取所有好友并区分显示在线.离线好友,好友上线.下线都有标记 3.将前后端交互的值改成用户id.显示值改成昵称ni ...

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

    一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.W ...

  6. JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

  7. Java AWT组件开发和Swing界面编程

    一.AWT组件开发 1.AWT AWT是抽象窗口工具箱的缩写,它为编写图形用户界面提供了用户接口,通过这个接口就可以继承很多方法,省去了很多工作.AWT还能使应用程序更好地同用户进行交互. AWT中的 ...

  8. JavaScript 多级联动浮动(下拉)菜单 (第二版)

    JavaScript 多级联动浮动(下拉)菜单 (第二版)   上一个版本(第一版请看这里)基本实现了多级联动和浮动菜单的功能,但效果不是太好,使用麻烦还有些bug,实用性不高.这次除了修改已发现的问 ...

  9. 基于第二次数独游戏,添加GUI界面

    高级软件工程第三次作业:基于第二次数独游戏,添加GUI界面.GUI界面代码如下: package firstGui; import java.awt.*; import java.awt.event. ...

随机推荐

  1. Visual Studio 注释与取消注释快捷键

    注释:        先CTRL+K,然后CTRL+C 取消注释: 先CTRL+K,然后CTRL+U

  2. 需要重写URL但请求的目录不存在报404

    用的是asp.net webform,在global.asax的application_beginrequest中写的代码 很简单的一个需求,在url中输入http://www.test.com/lc ...

  3. 大数据入门到精通16--hive 的条件语句和聚合函数

    一.条件表达 case when ... then when .... then ... when ... then ...end select film_id,rpad(title,20," ...

  4. day53 鼠标事件 键盘事件 及JQuery

    复习 // 语法: ECMAScript 操作: DOM BOM // 1.类型转化 // 转数字: +"3.14" | parseInt("123abc") ...

  5. echarts简单的折线图

    加jar包 <script src="<%=path %>/js/echarts.min.js"></script> 首先 在jsp页面中 选好 ...

  6. Tomcat 配置MySQL连接池

    <!--配置mysql数据库的连接池,         需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下                maxIdle 连接池中最多可 ...

  7. POJOの説明

    参考URL: https://baike.baidu.com/item/POJO/3311958?fr=aladdin https://wenku.baidu.com/view/eba89bbcf12 ...

  8. Spring+Quartz集群环境下定时调度的解决方案

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  9. python3下获取全局坐标

    前段时间自己想用python写一个关于截屏翻译的小功能,所以首先需要获取鼠标的坐标动作有按下.拖拽.释放.查找了很多资料无非是pyhook或者用其他语言重写.但是自己用的是python3.65,第三方 ...

  10. CSS3扫描动画效果

    .swiper-animate { position: absolute; width: 100%; height: 100%; left:; top:; z-index:; background: ...