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