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