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

📄 menu.java

📁 利用开源的源码为一个朋友的V3手机手机写的科学计算器
💻 JAVA
字号:
package xcalc;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

public final class Menu {
	private static Menu current;
	private static Menu root;	
	private final String name;
	private final Menu[] items; 
	private Menu parent;
	public static String selected;
	private static final String[] shortCut = {
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"*",
		"0",
		"#"
	};

	private Menu(final String n, final Menu[] i) {
		this.name = n;
		this.items = i;
	}
	
	public static boolean isRoot(){
		return current == root;
	}
	
	public static void setParent(){
		current = current.parent;
	}
	
	public static void initialize(){
		root = new Menu( "root",
			new Menu[]{
				new Menu(Solver.C_COMMANDS[Solver.K_1],null),
				new Menu(Solver.C_COMMANDS[Solver.K_2],null),
				new Menu(Solver.C_COMMANDS[Solver.K_3],null),
				new Menu(Solver.C_COMMANDS[Solver.K_4],null),
				new Menu(Solver.C_COMMANDS[Solver.K_5],null),
				new Menu(Solver.C_COMMANDS[Solver.K_6],null),
				new Menu(Solver.C_COMMANDS[Solver.K_7],null),
				new Menu(Solver.C_COMMANDS[Solver.K_8],null),
				new Menu(Solver.C_COMMANDS[Solver.K_9],null),
				new Menu("math",
					new Menu[]{
						new Menu(Solver.C_COMMANDS[Solver.K_ADD],null),
						new Menu(Solver.C_COMMANDS[Solver.K_SUB],null),
						new Menu(Solver.C_COMMANDS[Solver.K_BREAKET_OPEN],null),
						new Menu(Solver.C_COMMANDS[Solver.K_MUL],null),
						new Menu(Solver.C_COMMANDS[Solver.K_DIV],null),
						new Menu(Solver.C_COMMANDS[Solver.K_BREAKET_CLOSE],null),
						new Menu(Solver.C_COMMANDS[Solver.K_ANS],null),
						new Menu(Solver.C_COMMANDS[Solver.K_X],null),
						new Menu(Solver.C_COMMANDS[Solver.K_Y],null),
						new Menu("pow",
							new Menu[] {
								new Menu(Solver.C_COMMANDS[Solver.K_POWER],null),
								new Menu(Solver.C_COMMANDS[Solver.K_SQRT],null),
								new Menu(Solver.C_COMMANDS[Solver.K_LOG10],null),
								new Menu(Solver.C_COMMANDS[Solver.K_LOG2],null),
								new Menu(Solver.C_COMMANDS[Solver.K_LN],null),
								new Menu(Solver.C_COMMANDS[Solver.K_E],null),
								new Menu(Solver.C_COMMANDS[Solver.K_ABS],null)
							}						
						),
						new Menu("trig",
							new Menu[] {
								new Menu(Solver.C_COMMANDS[Solver.K_SIN],null),
								new Menu(Solver.C_COMMANDS[Solver.K_COS],null),
								new Menu(Solver.C_COMMANDS[Solver.K_TAN],null),
								new Menu(Solver.C_COMMANDS[Solver.K_ASIN],null),
								new Menu(Solver.C_COMMANDS[Solver.K_ACOS],null),
								new Menu(Solver.C_COMMANDS[Solver.K_ATAN],null),
								new Menu(Solver.C_COMMANDS[Solver.K_PI],null),
								new Menu("hyp",
									new Menu[] {
										new Menu(Solver.C_COMMANDS[Solver.K_SINH],null),
										new Menu(Solver.C_COMMANDS[Solver.K_COSH],null),
										new Menu(Solver.C_COMMANDS[Solver.K_TANH],null),
										new Menu(Solver.C_COMMANDS[Solver.K_ASINH],null),
										new Menu(Solver.C_COMMANDS[Solver.K_ACOSH],null),
										new Menu(Solver.C_COMMANDS[Solver.K_ATANH],null),
									}										
								)
							}	
						),
						new Menu("stat",
							new Menu[] {
								new Menu(Solver.C_COMMANDS[Solver.K_FAC],null),
								new Menu(Solver.C_COMMANDS[Solver.K_PER],null),
								new Menu(Solver.C_COMMANDS[Solver.K_COM],null)
							}	
						)
					}				
				),
				new Menu(Solver.C_COMMANDS[Solver.K_0],null),
				new Menu(Solver.C_COMMANDS[Solver.K_POINT],null)
			}		
		);		
		current = root;		
	}
	
	public static void draw(final Graphics g, final int l, 
			final int t, final int w, final int h){
		final int dx = w/3;
		final int dy = h/4;
		for(int i=0;i<current.items.length;++i){				
			String s = current.items[i].name;
			if((s != null && s.length() > 0)) {
				final int x = (i % 3)*dx+l;
				final int y = (i / 3)*dy+t;
				
				if(current.items[i].items != null){
					g.setColor(0xFFA500);
					g.fillRoundRect(x,y,dx-2,dy-2,5,5);	
					g.setColor(0xFFFFE0);
				} else {
					g.setColor(0xFFA500);
				}
				
				if (!isRoot() || i==9) {
					g.drawString(shortCut[i],x+1,y+dy/2,Graphics.BASELINE |Graphics.LEFT);
					g.setColor(0x000000);
				} else {
					g.setColor(0xEEEED0);
				}
				g.drawRoundRect(x,y,dx-2,dy-2,5,5);				
				g.drawString(s,x+dx/2,y+dy/2,Graphics.BASELINE |Graphics.HCENTER );
			}
		}		
	}
	
	public static boolean changeSelected(final int indx){
		selected = null;
		if(indx > -1 && indx<current.items.length){
			if(current.items[indx].items == null){
				selected = current.items[indx].name;
				current = root;
			} else {
				final Menu temp = current;
				current = current.items[indx];	
				current.parent = temp;
			}			
			return true;	
		}
		return false;			
	}
	
	public static boolean handle(final int x, final int y, final int l, 
			final int t, final int w, final int h){			
		final int dx = w/3;
		final int dy = h/4;		
		final int indx = (x-l)/dx+(y-t)/dy*3;
		//System.out.println("dx " + (x-l)/dx + " dy " + (y-t)/dy);
		//System.out.println("x " + (x-l) + " y " + (y-t));
		//System.out.println(" indx " + indx);
		return changeSelected(indx);
	}	
	
	public static boolean handle(final int keyCode){
		final int indx;
		switch(keyCode){	
			case Canvas.KEY_NUM1: indx = 0; break;
			case Canvas.KEY_NUM2: indx = 1; break;
			case Canvas.KEY_NUM3: indx = 2; break;
			case Canvas.KEY_NUM4: indx = 3; break;
			case Canvas.KEY_NUM5: indx = 4; break;
			case Canvas.KEY_NUM6: indx = 5; break;
			case Canvas.KEY_NUM7: indx = 6; break;
			case Canvas.KEY_NUM8: indx = 7; break;
			case Canvas.KEY_NUM9: indx = 8; break;
			case Canvas.KEY_STAR: indx = 9; break;
			case Canvas.KEY_NUM0: indx = 10; break;
			case Canvas.KEY_POUND: indx = 11; break;
			default: indx = -1; break;
		}
		return changeSelected(indx);	
	}

}

⌨️ 快捷键说明

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