主程序代码:
import javax.microedition.midlet.*;
public final class MainMidlet extends MIDlet {
private Display dis;
private Clock clock;
public MainMidlet() {
dis = Display.getDisplay(this);
clock = new Clock();
}
protected void startApp() throws MIDletStateChangeException {
this.setCurrent(clock);
new Thread(clock).start();
}
protected void pauseApp() {}
protected void destroyApp(boolean unconditional) {}
public void setCurrent(Displayable disp) {
dis.setCurrent(disp);
}
protected void exit(){
destroyApp(false);
notifyDestroyed();
}
}
时钟界面代码:
import javax.microedition.lcdui.*;
public class Clock extends Canvas implements Runnable,CommandListener{
private int screenWidth;
private int screenHeight;
private Points points;
private int n =0;
private int x,y;
private int r=75;
private Font f;
private Command cm1;
private Command cm2;
private MainMidlet mainMidlet;
private MenuCanvas menuCanvas;
private boolean PAUSE = false;
private String[] ss ={"3","4","5","6","7","8","9","10","11","12","1","2"};
public Clock(MainMidlet mainMidlet){
this.mainMidlet = mainMidlet;
menuCanvas = new MenuCanvas(mainMidlet);
screenWidth = this.getWidth();
screenHeight = this.getHeight();
points = new Points();
cm1 = new Command("退出",Command.EXIT,1);
cm2 = new Command("暂停",Command.STOP,1);
f = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_LARGE);
this.addCommand(cm1);
this.addCommand(cm2);
this.setCommandListener(this);
}
protected void paint(Graphics g) {
g.setColor(190, 190, 190);
g.fillRect(0, 0, screenWidth,screenHeight);
g.setColor(202,201, 202);
g.fillArc((screenWidth-159)/2, (screenHeight-159)/2, 2*r+9, 2*r+9, 0, 360);
g.setColor(212, 211, 212);
g.fillArc((screenWidth-156)/2, (screenHeight-156)/2, 2*r+6, 2*r+6, 0, 360);
g.setColor(222, 221, 222);
g.fillArc((screenWidth-153)/2, (screenHeight-153)/2, 2*r+3, 2*r+3, 0, 360);
g.setColor(225, 225, 225);
g.fillArc((screenWidth-150)/2, (screenHeight-150)/2, 2*r, 2*r, 0, 360);
g.setColor(0, 0, 0);
for(n=0;n<60;n++){
x = points.XValue(screenWidth,screenHeight,n,r);
y = points.YValue(screenWidth,screenHeight,n,r);
g.drawLine(screenWidth/2, screenHeight/2, x, y);
}
g.setColor(225, 225, 225);
g.fillArc((screenWidth-145)/2, (screenHeight-145)/2, 2*r-5, 2*r-5, 0, 360);
g.setColor(0, 0, 0);
for(n=0;n<12;n++){
x = points.XValue(screenWidth,screenHeight,5*n,r);
y = points.YValue(screenWidth,screenHeight,5*n,r);
g.fillArc(x-3, y-3, 5, 5, 0, 360);
}
g.setColor(100, 100, 100);
g.setFont(f);
for(n=0;n<12;n++){
x = points.XValue(screenWidth,screenHeight,5*n,66);
y = points.YValue(screenWidth,screenHeight,5*n,66);
g.drawString(ss[n], x, y-10, Graphics.HCENTER|Graphics.TOP);
}
points.drawClock(g, screenWidth, screenHeight,r);
}
public void run() {
while(!PAUSE){
try {
repaint();
serviceRepaints();
Thread.sleep(500);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
public void commandAction(Command c, Displayable d) {
if(c==cm1){
mainMidlet.exit();
}else if(c==cm2){
PAUSE = true;
}
}
}
画指针代码:
import java.util.*;
import javax.microedition.lcdui.*;
public class Points {
private int minute;
private int hour;
private int second;
private int n;
private double a;
private int d=4,x,y,hx1,hy1,hx2,hy2;
private TimeZone tz;
public Points(){
tz = TimeZone.getTimeZone("GMT+8");
}
protected int XValue(int screenWidth,int screenHeight,int n,int r){
a = Math.toRadians(6 * (n+60) % 360);
x=(int)(screenWidth/2+r*Math.cos(a));
hx1=(int)(screenWidth/2+d*Math.cos(a+Math.PI/2));
hx2=(int)(screenWidth/2+d*Math.cos(a-Math.PI/2));
return x;
}
protected int YValue(int screenWidth,int screenHeight,int n,int r){
a = Math.toRadians(6 * n % 360);
y= (int)(screenHeight/2+r*Math.sin(a));
hy1=(int)(screenHeight/2+d* Math.sin(a+Math.PI/2));
hy2= (int)(screenHeight/2+d*Math.sin(a-Math.PI/2));
return y;
}
public void drawClock(Graphics g,int screenWidth,int screenHeight,int r){
Calendar cal = Calendar.getInstance(tz);
g.setColor(0, 0, 0);
hour = cal.get(Calendar.HOUR);
minute = cal.get(Calendar.MINUTE);
n =((hour%12)*5+minute/12)+45;
XValue(screenWidth,screenHeight,n,50);
YValue(screenWidth,screenHeight,n,50);
g.fillTriangle(x, y, hx1, hy1, hx2, hy2);
g.setColor(50, 50, 50);
minute = cal.get(Calendar.MINUTE)+45;
XValue(screenWidth,screenHeight,minute,65);
YValue(screenWidth,screenHeight,minute,65);
g.fillTriangle(x,y, hx1, hy1, hx2, hy2);
g.setColor(220, 0, 0);
second = cal.get(Calendar.SECOND)+45;
XValue(screenWidth,screenHeight,second,70);
YValue(screenWidth,screenHeight,second,70);
g.drawLine(screenWidth/2, screenHeight/2, x, y);
g.setColor(220, 0, 0);
g.fillArc((screenWidth-8)/2, (screenHeight-8)/2, 8, 8, 0,360);
}
}