📄 qmenu.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 + -