⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qmenu.java

📁 j2me 高级UI
💻 JAVA
字号:
/**
 * 作者:cat 戚永城
 * 时间:2008-3-1
 * QQ:415898635
 * E-Mail:	415898635@qq.com
 * 			qyc_12345@163.com
 * 
 * */
package org.qui.menu;

import java.util.Vector;

import javax.microedition.lcdui.Graphics;

import org.qui.conmponent.QMenuBar;
import org.qui.container.QFrame;
import org.qui.image.JiugongDiv;
import org.qui.info.Key;
import org.qui.manager.QAbstructButton;
import org.qui.manager.UIManager;

public class QMenu extends QAbstructButton {

	public static int LEFT_ROOT_MENU = 0;

	public static int RIGHT_ROOT_MENU = 1;

	public QMenu(String label, int root) {
		super(0, QMenuBar.frame.frm_Height, 75, 20);
		this.label = label;
		this.root = root;
		if (root == LEFT_ROOT_MENU) {
			x = 0;
		} else if (root == RIGHT_ROOT_MENU) {
			x = QMenuBar.frame.frm_Width  - width;
		}
	}

	public void setRoot(boolean isRoot) {
		isRoot = true;
	}

	private Vector item = new Vector();// 0 menuItem 1 radio 2 check 3 menu

	private Vector style = new Vector();// 1表示拥有下级菜单

	private int root = 0;// 0表示从左菜单衍生

	private int selectedIndex = 0;

	private int sum = 0;

	public int someMenuOpen = -1;

	public QMenu fatherMenu = null;

	public void addMenuItem(QMenuItem menuitem) {
		item.addElement(menuitem);
		style.addElement("0");
		sum = item.size();
		//selectedIndex = sum;
		setLocation(menuitem, 0);
	}

	public void addRadionItem(QRadioButtonMenuItem menuitem) {
		item.addElement(menuitem);
		style.addElement("1");
		sum = item.size();
		//selectedIndex = sum;
		setLocation(menuitem, 1);
	}

	public void addCheckBoxItem(QCheckBoxMenuItem menuitem) {
		item.addElement(menuitem);
		style.addElement("2");
		sum = item.size();
		//selectedIndex = sum;
		setLocation(menuitem, 2);
	}

	public void addMenu(QMenu menu) {
		item.addElement(menu);
		menu.fatherMenu = this;
		style.addElement("3");
		sum = item.size();
		//selectedIndex = sum;
		setLocation(menu, 3);
	}

	public void setLocation(QAbstructButton menuItem, int menuStyle) {
		// set y
		for (int i = 0; i < sum; i++) {
			((QAbstructButton) item.elementAt(i)).y = y - (sum - i + 1) * 20;
			if (style.elementAt(i).equals("3")) {
				QMenu menu = ((QMenu) item.elementAt(i));
				menuItemaAdd(menu);
			}
		}

		// set x
		// 如果是menu 那么所有次级菜单level++
		if (menuStyle == 3) {
			QMenu menu = ((QMenu) menuItem);
			menu.level = level + 1;// 先设定循环前最底部menu的level
			menuLevelAdd(menu);
		}
	}

	// 需要有优化一下
	public void menuItemaAdd(QMenu menu) {
		int sum = menu.item.size();
		for (int i = 0; i < sum; i++) {
			QAbstructButton item = (QAbstructButton) menu.item.elementAt(i);
			item.y = menu.y - (sum - i - 1) * 20;
			if (menu.style.elementAt(i).equals("3")) {
				menuItemaAdd((QMenu) menu.item.elementAt(i));
			}
		}
	}

	public void menuLevelAdd(QMenu menu) {
		int sum = menu.item.size();
		for (int i = 0; i < sum; i++) {
			QAbstructButton item = (QAbstructButton) menu.item.elementAt(i);
			item.level++;
			item.y = menu.y - (sum - i + 1) * 20;
			if (menu.style.elementAt(i).equals("3")) {
				menuLevelAdd((QMenu) menu.item.elementAt(i));
			}
		}
	}

	public void paint(Graphics g) {
		g.setColor(fr, fg, fb);
		g.setFont(font);
		int str_offy = 10 - font.getHeight() / 2;
		// 画这个Menu拥有的Item
		for (int i = 0; i < sum; i++) {
			if (style.elementAt(i).toString().equals("0")) {
				QMenuItem temp = (QMenuItem) item.elementAt(i);
				temp.paint(g);
				
			} else if (style.elementAt(i).toString().equals("1")) {
				QRadioButtonMenuItem temp = (QRadioButtonMenuItem) item
						.elementAt(i);
				temp.paint(g);

			} else if (style.elementAt(i).toString().equals("2")) {
				QCheckBoxMenuItem temp = (QCheckBoxMenuItem) item.elementAt(i);
				temp.paint(g);

			} else if (style.elementAt(i).toString().equals("3")) {
				// 画自身
				
				int offx = 0;
				if (level != 0) {
					if (root == 0) {
						offx = level * width;
					} else if (root == 1) {
						offx = -level * width;
					}
				}
				QMenu temp = (QMenu) item.elementAt(i);
				g.drawImage(UIManager.menu_back, temp.x+ offx, temp.y ,  Graphics.LEFT | Graphics.TOP);
				g.drawString(temp.getLabel(), temp.x + offx + 2, temp.y + str_offy, Graphics.LEFT | Graphics.TOP);
				// 画箭头
				if(temp.sum!=0){
					if (root == 0) {
						g.drawImage(UIManager.arrow_white_right, temp.x + offx + width - 7,temp.y  + 5, Graphics.LEFT | Graphics.TOP);
					} else {
						g.drawImage(UIManager.arrow_white_left, temp.x + offx - 1, temp.y  + 5,Graphics.LEFT | Graphics.TOP);
					}
	
					if (someMenuOpen == i) {
						temp.level = level + 1;
						temp.root = root;
						temp.paint(g);
					}
				}
			}
		}

		// 画选择框
		if (selectedIndex >= 0 && selectedIndex < sum && someMenuOpen == -1) {
			int offx = 0;
			if (level != 0) {
				if (root == 0) {
					offx = level * width;
				} else if (root == 1) {
					offx = -level * width;
				}
			}
			if (level == 0) {
				JiugongDiv.drawJiuGong(g, UIManager.light, x + offx-8, y  - (sum + 1 - selectedIndex)* height-8, width+16, height+16);
			} else {
				JiugongDiv.drawJiuGong(g, UIManager.light,  x + offx-8, y  - (sum - 1 - selectedIndex)* height-8, width+16, height+16);
			}
		}

	}

	public void keyPressed(int keyCode) {

		if (someMenuOpen == -1) {
			if (keyCode == Key.UP) {
				selectedIndex = (selectedIndex + sum - 1) % sum;
			} else if (keyCode == Key.DOWN) {
				selectedIndex = (selectedIndex + sum + 1) % sum;
			} else if (keyCode == Key.LEFT) {
				if (selectedIndex>=0 && selectedIndex<sum
						&& root == QMenu.RIGHT_ROOT_MENU
						&& style.elementAt(selectedIndex).equals("3")
						&& ((QMenu)item.elementAt(selectedIndex)).sum!=0) {
					someMenuOpen = selectedIndex;
				} else if (root == QMenu.LEFT_ROOT_MENU) {
					if (fatherMenu != null) {
						fatherMenu.someMenuOpen = -1;
					}
				}
			} else if (keyCode == Key.RIGHT) {
				if (selectedIndex>=0 && selectedIndex<sum
						&& root == QMenu.LEFT_ROOT_MENU
						&& style.elementAt(selectedIndex).equals("3")
						&& ((QMenu)item.elementAt(selectedIndex)).sum!=0) {
					someMenuOpen = selectedIndex;
				} else if (root == QMenu.RIGHT_ROOT_MENU) {
					if (fatherMenu != null) {
						fatherMenu.someMenuOpen = -1;
					}
				}
			} else if (keyCode == Key.FIRE) {
				if(style.elementAt(selectedIndex).equals("3")){
					if(((QMenu)item.elementAt(selectedIndex)).sum!=0){
						super.keyPressed(keyCode);	
					}
				}else{
					((QAbstructButton) item.elementAt(selectedIndex))
					.keyPressed(keyCode);
				}
			}
		} else {
			((QMenu) item.elementAt(selectedIndex)).keyPressed(keyCode);
		}
	}

	public void keyReleased(int keyCode) {
		if (someMenuOpen == -1) {
			if (keyCode == Key.FIRE) {
				if(style.elementAt(selectedIndex).equals("3")){
					if(((QMenu)item.elementAt(selectedIndex)).sum!=0){
						super.keyReleased(keyCode);	
					}
				}else{
					((QAbstructButton) item.elementAt(selectedIndex))
					.keyReleased(keyCode);
				}
			}
		} else {
			((QMenu) item.elementAt(selectedIndex)).keyReleased(keyCode);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -