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

📄 mycanvas.java

📁 J2ME中的一个简单二级菜单代码
💻 JAVA
字号:
import java.io.IOException;import java.io.PrintStream;import java.util.Random;import java.util.Vector;import javax.microedition.io.Connection;import javax.microedition.io.Connector;import javax.microedition.lcdui.*;import javax.microedition.midlet.MIDlet;import javax.wireless.messaging.MessageConnection;import javax.wireless.messaging.TextMessage;public class MyCanvas extends Canvas implements Runnable, CommandListener{    TMidlet tm;    public static MyCanvas myc;    GameMenu gm;    String s;    public MyCanvas(TMidlet tm1){        setFullScreenMode(true);        myc = this;        tm = tm1;        gm = new GameMenu();    }    TextField tf;    TextField tf2;    Command e;    Form a;    public void keyPressed(int keys){    	gm.menuKeyPressed(keys);        switch(keys){            case 48://                System.out.println("aaaa");                a = new Form("登陆游戏");                tf = new TextField("账号","",10,TextField.ANY);                tf2 = new TextField("密码","",10,TextField.PASSWORD);                a.append(tf);                a.append(tf2);                exit = new Command("返回", 2, 2);                e = new Command("确定", 4, 2);                a.addCommand(exit);                a.addCommand(e);                a.setCommandListener(this);               tm.display.setCurrent(a);                break;            case -5://                System.out.println("bbbbb");                break;        }    }    public void run() {        long begin; //用来临时记录时间              while (true)              {                     begin = System.currentTimeMillis(); //获得系统时间                     repaint(); //重新刷新屏幕                     serviceRepaints(); //强制线程重新刷新屏幕                     while (System.currentTimeMillis() - begin < 100);                     //为保证线程每次刷新平面均衡、以达到屏幕稳定的更新速度                     //设定屏幕更新速度为0.100秒每次(10FPS即每秒刷新10次)                     /*线程的每次循环过程都需要处理两个部分,一是逻辑处理部分gameLoop(),二是屏幕绘制部分repaint()及serviceRepaints();那么每次的屏幕更新需要保持游戏的稳定。就需要每次刷新速度恒定,才可以保证逻辑处理过程的准确(例如线程每循环一次,游戏中的主角向前行动一步,如果时快时慢就不能保证主角行走动作的流畅,这点在ACT游戏中体现的尤其重要。)所以我们需要对线程的每次循环做出一个恒定的判定,所采取的操作就是,循环开始就获得一次系统时间,在执行完逻辑处理部分和屏幕绘制部分的时候再一次获得系统时间。当两次时间差大于0.0100秒(预先设定的屏幕刷新速度)才可以进行下一次循环。*/              }    }//    String name = "";    public void paint(Graphics g) {         drawClearScreen(g,0xffffff);//         g.setColor(0x000000);//         g.drawRect(40, 10, (getWidth()/2-40)<<1, 40);//         g.drawString("登陆游戏",45,12,0);    	gm.showMenu(g);         if(s!=null){             g.setColor(0xff0000);             g.drawString(s, 50, 120, 0);         }//         cu.drawBlack(g, 10, 10);//         DrawFrameA(g,10,10,getWidth()/2,getHeight()/2,20,20,20);    }    Thread thread;    public final synchronized void startThread()    {        thread = new Thread(this);                                                //启动线程        thread.start();    }     public void drawClearScreen ( Graphics g , int Color ) { //清屏        g.setClip( 0 , 0 , this.getWidth() , this.getHeight() ) ;        g.setColor( Color ) ;        g.fillRect( 0 , 0 , this.getWidth() , this.getHeight()) ;	}    Command ok;    Command exit;    public void commandAction(Command c, Displayable d) {        if(c==exit){            tm.display.setCurrent(myc);            s = null;        }        if(c==e){            if(tf.getString().length()==0||tf2.getString().length()==0){                Alert alert = new Alert("");                alert.setTimeout(1000);                if(tf.getString().length()==0)                    alert.setString("账号不能为空");                else                    alert.setString("密码不能为空");                tm.display.setCurrent(alert,a);            }else{                s=tf.getString();                tm.display.setCurrent(myc);            }        }    } public static void DrawFrameB(Graphics g, int x, int y, int w, int h)    {        g.setColor(78, 48, 22);        g.drawRect(x, y, w, h);        g.setColor(143, 104, 45);        g.drawRect(x + 1, y + 1, w - 2, h - 2);        g.setColor(119, 79, 53);        g.fillRect(x + 2, y + 2, w - 3, h - 3);    } private void DrawFrameA(Graphics g, int x, int y, int w, int h, int c1, int c2,            int c3)    {        g.setColor(78, 48, 22);        g.drawRect(x, y, w, h);        g.setColor(95, 66, 61);        g.drawRect(x + 1, y + 1, w - 2, h - 2);        g.setColor(119, 79, 53);        g.drawRect(x + 2, y + 2, w - 4, h - 4);        g.setColor(143, 104, 45);        g.drawRect(x + 3, y + 3, w - 6, h - 6);        g.setColor(78, 48, 22);        g.drawRect(x + 4, y + 4, w - 8, h - 8);        g.setColor(c1, c2, c3);        g.fillRect(x + 5, y + 5, w - 9, h - 9);    }//    public void itemStateChanged(Item item) {//        if((item instanceof TextField) && tf2!=null && tf.getString().length()!=0 && e != null)//        {//            tf2.setDefaultCommand(e);                          // b 和   e  是什么东西  E为Command//            tf2.setItemCommandListener(this);//        }////    }//    public void commandAction(Command c, Item item) {//        if(c == e){//            s = tf.getString();//            tm.display.setCurrent(this);//        }//    } public void drawMenu(Graphics g,int x,int y,int num){      g.setColor(0xffffff); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(0xff00ff); for(int i=0;i<num;i++){ g.drawRect(0,0+y*i,x,y);         }/***传进来的菜单项目,简单点说就是有多少格,五格以上就免了,那样还要写一个更加广泛的涵数,现在没空*写上每格的字*/ g.setColor(0X333333); switch(num) { case 5:g.drawString("123",0,y*5,Graphics.TOP|Graphics.LEFT); case 4:g.drawString("456",0,y*4,Graphics.TOP|Graphics.LEFT); case 3:g.drawString("789",0,y*3,Graphics.TOP|Graphics.LEFT); case 2:g.drawString("sde",0,y*2,Graphics.TOP|Graphics.LEFT); case 1:g.drawString("sdf",0,y*1,Graphics.TOP|Graphics.LEFT); default:break; }      }}

⌨️ 快捷键说明

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