环境: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. Java Script 简介

    Java Script 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备.JavaScrip ...

  2. Form-encoded method must contain at least one @Field.

    https://blog.csdn.net/liunian823/article/details/80290855 记得之前遇到过这个问题,并且记录笔记了,这次再翻笔记,却没有找到...搜索 了下. ...

  3. jmeter入门非GUI(三)

    配置见https://www.cnblogs.com/wish5714/p/9722193.html 该篇介绍非GUI模式的测试方法,及结果报告分析 简介 使用非 GUI 模式,即命令行模式运行 JM ...

  4. 其他封装ui的平台

      mint平台 http://mint-ui.github.io/#!/zh-cn

  5. 高性能mysql 事务笔记

    事务的四大特性原子性.一致性.隔离性.持久性, 事务隔离的四大隔离级别: READ UNCOMMITTED(未提交读), 在 read uncommitted级别,事务中的修改,及时没有提交,对其他事 ...

  6. Saving custom fields in production order

    In additional data screen 1.PPCO0012->EXIT_SAPLCOKO1_001->ZXCO1U11 ​ ​ ci_aufk-zxxx = i_caufvd ...

  7. IIS发布MVC ASP.NET网站

    发布网站后,发现无法访问,最后在配置文件上添加一段: <system.codedom> <compilers> <compiler language="c#;c ...

  8. dskinlite(uieasy mfc界面库)使用记录4:listbox测试

    先看效果图: xml代码: 作者qq:80101277,dskinlite交流qq群:138231653 <window name="listbox1" type=" ...

  9. MWeb for Mac使用教程-如何在文档库中快速搜索

    使用MWeb for Mac专业的 Markdown 编辑写作软件,可以让你随时记录自己的想法,灵感,创意,为您的工作节省宝贵的时间.本篇文章带来的是MWeb for Mac如何在文档库中快速搜索使用 ...

  10. 遍历ArcMap已加载数据的属性

    import arcpy f = open("D:\workspace\coords.txt","w") with arcpy.da.SearchCursor( ...