环境: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课程之团队开发冲刺1.1

    一.今日目标 1.完成课程助手的日期显示以及周数显示功能 2.将功能表改成侧面功能栏 3.将代码重新规范,尽量使得主函数简洁明了

  2. 音视频处理概要 markdown

    最近要想办法把录制的音视频进行拼接. 比方说此次录制的视频有三段,通过高清直播编码器录制,录制下的标准为h.264 直接用ffmpeg简单拼接,音频会丢失,所以有了此次解决方案(有可能会繁琐,简单方案 ...

  3. 微信小程序如何实现和微信客服通话?

    微信小程序如何实现和微信客服通话?

  4. JMeter之自动重定向和跟随重定向的区别

    自动重定向:只针对Get和Head请求,自动重定向转向到最终目标页面,但是Jmeter不记录重定向的中间页面过程,只记录最终页面返回结果.在结果树中,只能看到最终页面的服务器返回. 跟随重定向:是ht ...

  5. python3作业:模拟登录

    __author__ = "bin007" customer = {}#存储用户信息#处理用户信息文件try: with open('login.txt','r',encoding ...

  6. Smartforms

    Include text Populate indicator in program perform get_text using '0002' ls_detail-vbeln"Header ...

  7. java_28 序列化与反序列化

    1.序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 2.序列化和反序列化的使用: java.io ...

  8. Java多线程01(Thread类、线程创建、线程池)

    Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于 ...

  9. 机器学习入门:Linear Regression与Normal Equation -2017年8月23日22:11:50

    本文会讲到: (1)另一种线性回归方法:Normal Equation: (2)Gradient Descent与Normal Equation的优缺点:   前面我们通过Gradient Desce ...

  10. SpringMvc中Hashmap操作遇到 java.util.ConcurrentModificationException: null

    代码按照网上修改为类似,还不能解决问题 for (Iterator<String> it = target.keySet().iterator(); it.hasNext(); ) { i ...