环境: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. RPC web service

    ---------------------------------------------------------------------------------------------------- ...

  2. spring项目启动时执行任务

    https://www.jianshu.com/p/745868a34379

  3. 3D Math Keynote 2

    [3D Math Keynote 2] 1.方向(diretion),指的是前方朝向.方位(orientation),指的是head.pitch.roll. 2.欧拉角的缺点: 1)给定方位的表达式不 ...

  4. 使用电脑ODBC测试数据库连接方法

    使用电脑ODBC测试数据库连接方法 一.打开电脑的控制面板——管理工具——数据源(ODBC),在用户dsn页面中点击添加按钮,选择IBM DB2 ODBC DRIVER,点击完成. 二.在弹出的配置页 ...

  5. Python 解决命令行删除、退格乱码问题

    安装了python 在命令行界面无法进行删除.退格 1 安装readline模块 两种方式:yum install -y readline-devel  readline 或者 下载文件https:/ ...

  6. Unity3d项目入门之虚拟摇杆

    Unity本身不提供摇杆的组件,开发者可以使用牛逼的EasyTouch插件或者应用NGUI实现相关的需求,下面本文通过Unity自身的UGUI属性,实现虚拟摇杆的功能. 主参考 <Unity:使 ...

  7. C++ 深入理解 虚继承、多重继承和直接继承

    [摘要] 本文从5段代码实例出发,通过类中类的普通继承,类的虚继承,类的多重继承,多个虚函数类的普通继承.虚继承与多重继承,几个交叉概念,详细的阐释了继承.虚函数与虚继承的基本概念,深入剖析了继承于虚 ...

  8. python基础(16)私有类,类,类变量

    1.私有类: class My: def test(self): self.__password = 123456 def say(self): print('password',self.__pas ...

  9. 使用gcc命令编译多个文件

    使用g++命令直接一次性编译多个文件 这里以简单的HelloWorld程序为例,假设我们一共有三个文件:main.cpp,HelloWorld.cpp和HelloWorld.h. 其中HelloWor ...

  10. NumPy学习_02 ndarray基本操作

    1.算术运算符 它们只用于位置相同的元素之间,即为元素级的运算. 所得到的运算结果组成一个新的数组. 不用编写循环即可对数据执行批量运算.(矢量化) import numpy as np # 创建一个 ...