环境: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. Spring <mvc:default-servlet-handler/>

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  2. linux卸载erlang

    rpm -qa | grep erlang | xargs rpm -e --nodeps

  3. 使用PLSQL导出表

    前提是登录PLSQL的用户具有导出数据的权限 菜单Tools-->Export Tables

  4. Ubuntu---gcc && g++

    摘要:今天用 gcc 编译 c++ 代码,发现会报错:std::cout  这个函数无定义,所以决定查一下原因,在这里总结一下,虽然以后回头看一定会觉得太菜,但是新手期还是总要经历的一个阶段,所以就记 ...

  5. 牛客练习赛44C

    链接:https://ac.nowcoder.com/acm/contest/634/C来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模板 ...

  6. WPF 初识

    1.WPF 与Winform比较 1.1.WPF所有的操作都不依赖于GDI和GDI+,而是间接依赖于强大的Direct3D,这就意味着通过WPF可以做出以前WinFrom无法想象的视觉效果,包括3D效 ...

  7. 七牛存储qshell工具

    ---恢复内容开始--- 工具地址:https://developer.qiniu.com/kodo/tools/1302/qshell 下载完成后:根据自己的系统选择需要的可执行文件,支持linux ...

  8. Zookeeper配置文件

    zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:Client-Serv ...

  9. Centos 系统swap虚拟内存添加与删除配置

    SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...

  10. springmvc webservlet 加redis 订阅消息

    由于项目内请求的数据需要 等待设备处理完毕后返回才能得到.请求命令返回的是发送成功的包,而不是设备处理的包,所以需要请求等待.. 方式一:项目中 添加了redis作为一个缓存, webservlet ...