/* * MWT - Micro Window Toolkit * Copyright (C) 2007 Lucas Domanico - lucazd@gmail.com * * Licensed under the terms of the GNU Lesser General Public License: * http://www.opensource.org/licenses/lgpl-license.php * * For further information visit: * http://j2me-mwt.sourceforge.net/ */ import java.util.Random; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Graphics; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import mwt.Button; import mwt.Component; import mwt.EventListener; import mwt.Label; import mwt.Window; // Custom Window // Override the behavior of the window class MyWindow extends Window { public MyWindow(int x,int y,int width,int height) { super(x,y,width,height); } // Now the focus may be moved with action keys instead of the key numbers public int getFocusAction(long key) { switch(Example8.canvas.getGameAction((int)key)) { case Canvas.FIRE: return FOCUSACTION_FIRE; case Canvas.LEFT: return FOCUSACTION_PREV; case Canvas.RIGHT: return FOCUSACTION_NEXT; default: return FOCUSACTION_NONE; } } // A class can override the paint method instead of changing the skin protected void paint(Graphics g, Window window) { paintChilds(g,window); // must call this method g.setColor(0x000000); g.drawRoundRect(0,0,getWidth(),getHeight(),8,4); } // Now the focus will be moved only when the key is released protected void dispatchKey(long key) { if(key >> 32 != 0) return; switch(getFocusAction((int)key)) { case FOCUSACTION_PREV: setFocusPrevious(); break; case FOCUSACTION_NEXT: setFocusNext(); break; } } } class Canvas8 extends Canvas implements Runnable, EventListener { Window win = new MyWindow(20,20,100,100); // the main window -reference- boolean exit; // setted to true to finish the application static final int ACTION_EXIT = 0; // button's action ids // notify input protected void keyPressed(int keyCode) { win.setKeyState(keyCode,Window.KEYSTATE_PRESSED,true); } protected void keyReleased(int keyCode) { win.setKeyState(keyCode,Window.KEYSTATE_RELEASED,true); } // event listener implementation public void processEvent(int eventType, Component sender, Object[] args) { switch(eventType) { case EVENT_ACTION: // when a button is pressed an event action is triggered switch(((Button)sender).getActionType()) { case ACTION_EXIT: exit = true; return; } break; default: break; } } Canvas8() { win.add(new Label(4,4,60,20,"Choose")); win.add(new Button(20,24,60,20,"Exit 1",this,ACTION_EXIT)); win.add(new Button(20,50,60,20,"Exit 2",this,ACTION_EXIT)); win.add(new Button(20,76,60,20,"Exit 3",this,ACTION_EXIT)); win.setFocusFirst(); } public void run() { while(!exit) { // main loop win.repeatKeys(true); repaint(); serviceRepaints(); try { Thread.sleep(1); } catch(Exception e) { e.printStackTrace(); } } Example8.instance.notifyDestroyed(); } protected void paint(Graphics g) { g.setColor(0xFFFFFFFF); // clear graphics g.fillRect(0,0,getWidth(),getHeight()); Random r = new Random(); // paint the "background" for(int i=0; i<10 ;i++) { g.setColor(Math.abs(r.nextInt())); g.drawRect(Math.abs(r.nextInt())%128,Math.abs(r.nextInt())%128,Math.abs(r.nextInt())%128,Math.abs(r.nextInt())%128); } win.paint(g); // and paint the window... } } public class Example8 extends MIDlet { static MIDlet instance; static Canvas canvas; protected void startApp() throws MIDletStateChangeException { instance = this; Canvas8 c = new Canvas8(); canvas = c; Display.getDisplay(this).setCurrent(c); new Thread(c).start(); } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } }