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

📄 mainwindow.java

📁 Micro Window Toolkit(MWT)是一个用于开发J2ME用户界面(UI)的工具包。它具有友好
💻 JAVA
字号:
package com.viacube.j2me.component;

import java.util.Vector;

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

import com.viacube.j2me.Midlet;
import com.viacube.j2me.model.ImageList;
import com.viacube.j2me.model.MenuItem;

import mwt.Button;
import mwt.Component;
import mwt.EventListener;
import mwt.Font;
import mwt.Label;
import mwt.Skin;
import mwt.Window;

public class MainWindow extends Canvas implements Runnable, EventListener{
	private static final int ACTION_EXIT = 10;
	static final int ACTION_SELECT = 2;
	int width;
	int height;
	int idx = 1;  //index of menu
	int scroll;//the number of menu the screen display
	int count;
	int y[] = new int[Panel.menuNumber];

	boolean exit;	// setted to true to finish the application
	boolean isPaint;
	boolean isChange;

	Vector v = new Vector(Panel.menuNumber);
	static MainWindow mw = null;
	Panel panel = null;
	Button button = null;
	Window win = null;

	private void initWindow(){
		win = new Window(0,-2,width+2,height+5){
			private final int FOCUSACTION_LEFT = 5;
			private final int FOCUSACTION_RIGHT = 6;
			public int getFocusAction(long key) {
				switch(Midlet.canvas.getGameAction((int)key)) {
					case Canvas.FIRE:	return FOCUSACTION_FIRE;
					case Canvas.LEFT:   return FOCUSACTION_LEFT;
					case Canvas.RIGHT:  return FOCUSACTION_RIGHT;
					case Canvas.UP:	    return FOCUSACTION_PREV;
					case Canvas.DOWN:   return FOCUSACTION_NEXT;
					default: return FOCUSACTION_NONE;
				}
			}

			protected void dispatchKey(long key) {
				if(key >> 32 != 0) return;
				switch(getFocusAction((int)key)) {
					case FOCUSACTION_PREV: upSelect();setFocusPrevious(); break;
					case FOCUSACTION_NEXT: downSelect();setFocusNext(); break;
					case FOCUSACTION_LEFT: setFocusLeft(); break;
					case FOCUSACTION_RIGHT: setFocusRight(); break;
				}
			}

			private void setFocusLeft() {
				for(int i=0;i<Panel.menuNumber;i++){
					if(getChild(1) == ((MenuItem)v.elementAt(i)).getSubWindow()){
						(((MenuItem)v.elementAt(i)).getMenu()).setSkin(Button.STYLE_DISABLED, new Skin(ImageList.big[i],0));
					}else{
						(((MenuItem)v.elementAt(i)).getMenu()).setSkin(Button.STYLE_DISABLED, new Skin(ImageList.small[i],0));
					}
				}
				getChild(1).setEnabled(true);
				getChild(0).setEnabled(false);
				setFocusFirst();
			}
			private void setFocusRight(){
				getChild(1).setEnabled(false);
				getChild(0).setEnabled(true);
				for(int i=0;i<Panel.menuNumber;i++){
					if(getChild(1) == ((MenuItem)v.elementAt(i)).getSubWindow()){
						setFocus(((MenuItem)v.elementAt(i)).getMenu());
						break;
					}
				}
			}
			private void upSelect(){
				if(scroll<Panel.menuNumber){
					if ( !isChange && panel.isEnabled() == true) {
						isChange = true;
						if ( idx > 0) idx--;
						if ( win.getFocus() == panel.getChild(0)) {
							for ( int i = 0 ; i <  Panel.menuNumber ; i++) {
								if ( panel.getChild(0) == ((MenuItem) v.elementAt(i)).getMenu()) {
									if ( i > 0){
										idx = i - 1;
									}else{
										idx = Panel.menuNumber - 1;
									}
									break;
								}
							}
							panel.removeChild(count - 1);
							panel.add(((MenuItem) v.elementAt(idx)).getMenu(), 0);
						}
					}
				}
			}
			private void downSelect(){
				if(scroll<Panel.menuNumber){
					if ( !isChange && panel.isEnabled() == true) {
						isChange = true;
						if ( idx <  Panel.menuNumber - 1) idx++;
						if ( win.getFocus() == panel.getChild(count - 1)) {
							if ( panel.getChildCount() > count) {
								panel.removeChild(0);
							}
							for ( int i = 0 ; i < Panel.menuNumber ; i++) {
								if ( panel.getChild(count - 1) == ((MenuItem) v.elementAt(i)).getMenu()) {
									if(i< Panel.menuNumber-1){
										idx = i + 1;
									}else{
										idx = 0;
									}
									break;
								}
							}
							panel.removeChild(0);
							panel.add(((MenuItem) v.elementAt(idx)).getMenu());
						}
					}
				}
			}
		};
	}

	private void keyAction(int keyCode){
		if(win.getFocusAction(keyCode)==Window.FOCUSACTION_NEXT || win.getFocusAction(keyCode)==Window.FOCUSACTION_PREV){
				isPaint = false;
				isChange = false;
			}
	}

	protected void keyPressed(int keyCode){
		win.setKeyState(keyCode,Window.KEYSTATE_PRESSED,true);
		keyAction(keyCode);
		if(keyCode==Canvas.KEY_STAR)exit = true;
	}

	protected void keyReleased(int keyCode){
		win.setKeyState(keyCode,Window.KEYSTATE_RELEASED,true);
		keyAction(keyCode);
	}

	public MainWindow(){
		setFullScreenMode(true);
		width =getWidth();
		height = getHeight();
		scroll = (height)/(Panel.menuHeight+Panel.Yinterval);
		count = scroll;
		mw = this;
		try{
			Font font = new Font(0x4A708B, Font.FACE_PROPORTIONAL, Font.SIZE_SMALL, Font.STYLE_BOLD);
			Label.setDefaultFont(Label.STYLE_DEFAULT, font);
			Label.setDefaultFont(Label.STYLE_DISABLED, font);
			Button.setDefaultFont(Button.STYLE_DEFAULT, font);
			Button.setDefaultFont(Button.STYLE_FOCUSED, font);
			Button.setDefaultFont(Button.STYLE_PRESSED, font);
			Button.setDefaultFont(Button.STYLE_DISABLED, font);
		}catch(Exception e){
			e.printStackTrace();
		}
		if(count>Panel.menuNumber)count=Panel.menuNumber;
		panel = new Panel(width-25, 0, width, height);
		initWindow();
		win.add(panel);
		win.setFocusFirst();
		win.setDoubleBuffered(false);
		Component c = win.getChild(0);
		for(int i=0;i<count;i++){
			Component co = c.getChild(i);
			y[i]=co.getY();
		}
	}

	protected void paint(Graphics g) {
		g.setColor(-1);
		g.fillRect(0, 0, width, height);
		if(!isPaint){
			isPaint = true;
			Component c = win.getChild(0);
			if(c.isEnabled()==true){
				if(c instanceof Button){}else{
					for(int j=0;j<c.getChildCount();j++){
						Component co = c.getChild(j);
						if(win.getFocus()==co){
							co.setWidth(Panel.menuEnlargeWidth);
							co.setHeight(Panel.menuEnlargeHeight);
							co.setX(1);
							co.setY(y[c.getChild(co)]-6);
						}else{
							co.setWidth(Panel.menuWidth);
							co.setHeight(Panel.menuHeight);
							co.setX(6);
							co.setY(y[c.getChild(co)]);
						}
					}
				}
			}
			for(int i=0;i<Panel.menuNumber;i++){
				if(win.getFocus()==((MenuItem)v.elementAt(i)).getMenu()){
					if(win.getChildCount()>1){
						win.removeChild(1);
					}
					win.add(((MenuItem)v.elementAt(i)).getSubWindow());
					break;
				}
			}
		}
		win.paint(g);
	}

	public void run() {
		while(!exit){
			win.repeatKeys(true);
			repaint();
			serviceRepaints();
		}
		Midlet.instance.notifyDestroyed();
	}

	public void processEvent(int eventType, Component c, Object[] args) {
		switch(eventType) {
			case EVENT_ACTION: // when a button is pressed an event action is triggered
				switch(((Button)c).getActionType()) {
					case ACTION_EXIT: exit = true; return;
				}
				break;
			default: break;
		}
	}
}

⌨️ 快捷键说明

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