menupool.java
来自「jrc-src0.4.00源代码发布版(Java客户端框架)」· Java 代码 · 共 170 行
JAVA
170 行
//Source file: d:\\Program Files\\Rational\\RUPBuilder\\cn\\com\\efly\\clientframe\\core\\container\\MenuPool.java
package efly.clientframe.core.container;
import java.util.Vector;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import efly.clientframe.core.MenuInfo;
/**
* @author efly
* @version 1.0.0,11/25/02
*/
public class MenuPool {
private static MenuPool instance;
private final MenuNode root = new MenuNode(null);
private Shell shell = MultiData.getMultiData().getFrame();
private Menu menuBar = new Menu(shell, SWT.BAR);
/**
* @roseuid 3DD9E41A0154
*/
protected MenuPool() {
shell.setMenuBar(menuBar);
}
/**
* @return MenuPool
* @roseuid 3DD98EB202DC
*/
public synchronized static MenuPool getMenuPool() {
if (instance == null)
instance = new MenuPool();
return instance;
}
/**
* 获得菜单
* @param menuPath
* @return Menu
* @roseuid 3DD990B5003E
*/
public Menu acquireMenu(String[] menuPath) {
Menu menu = null;
MenuItem item = acquireMenuItem(menuPath);
if (item != null) {
menu = item.getMenu();
}
if (menu != null) {
return menu;
}
int len = menuPath.length, p = 0;
MenuNode node = root, temp;
while (p < len) {
temp = node.getSubNode(menuPath[p]);
if (temp == null) {
MenuItem menuItem;
if (p == 0)
menuItem = new MenuItem(menuBar, SWT.CASCADE);
else
menuItem =
new MenuItem(
node.getMenuInfo().getMenuItem().getMenu(),
SWT.CASCADE);
menuItem.setText(menuPath[p]);
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
menuItem.setMenu(submenu);
MenuNode add =
new MenuNode(new MenuInfo(menuItem, menuPath[p]));
node.addSubNode(add);
node = add;
menu = submenu;
} else
node = temp;
p++;
}
return menu;
}
/*
public void validate() {
iterateNode(root);
}
private void iterateNode(MenuNode node) {
MenuNode[] nodes = node.getSubNodes();
if (nodes != null) {
for (int i = 0; i < nodes.length; i++) {
iterateNode(nodes[i]);
}
}
}*/
/**
* 获得菜单项
* @param menuPath
* @return MenuItem
*/
private MenuItem acquireMenuItem(String[] menuPath) {
MenuNode node = acquireMenuNode(menuPath);
if (node != null)
return node.getMenuInfo().getMenuItem();
return null;
}
private MenuNode acquireMenuNode(String[] menuPath) {
int p = 0;
int len = menuPath.length;
MenuNode node = root;
MenuNode temp = null;
while (p < len && ((temp = node.getSubNode(menuPath[p++])) != null)) {
node = temp;
}
return node == null || temp == null ? null : node;
}
private class MenuNode {
private MenuInfo info;
private Vector subNodes = new Vector(5);
public MenuNode(MenuInfo menu) {
info = menu;
}
public MenuInfo getMenuInfo() {
return info;
}
public MenuNode[] getSubNodes() {
int size = subNodes.size();
if (size == 0)
return null;
MenuNode[] temp = new MenuNode[size];
for (int i = 0; i < size; i++) {
temp[i] = (MenuNode) subNodes.elementAt(i);
}
return temp;
}
public MenuNode getSubNode(String itemName) {
MenuNode[] temp = getSubNodes();
if (temp == null)
return null;
int size = temp.length;
String name;
for (int i = 0; i < size; i++) {
name = temp[i].getMenuInfo().getItemName();
if (name.equals(itemName))
return temp[i];
}
return null;
}
public void setMenuInfo(MenuInfo menu) {
info = menu;
}
public void addSubNode(MenuNode node) {
subNodes.addElement(node);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?