📄 drawmidlet.java
字号:
package wbClient;
import java.io.*;
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
public class DrawMIDlet extends MIDlet{
Display display;
MyClass canvas ;
public DrawMIDlet(){
display = Display.getDisplay(this);
}
protected void startApp(){
canvas = new MyClass(this);
display.setCurrent(canvas);
}
protected void pauseApp(){
}
protected void destroyApp(boolean unconditional){
}
protected void exitMIDlet(){
System.out.println("exitMIDlet");
destroyApp(false);
notifyDestroyed();
}
}
class MyClass extends Canvas implements CommandListener{
private DrawMIDlet drawMIDlet;
private Command exit;
private Command erase;
private Command connect;
/*add in 2008-5-21*/
private Command zoomIn;
private Command zoomOut;
private int currentW;
private Image currentImage;
/*add in 2008-5-21*/
private boolean eraseFlag = false;
private boolean isFirstPaint;
private int sX=0,sY=0,cX=0,cY=0;
private Vector dataBags;
private Image dImage;
// private Image dImageBackground; //add in 2008-5-14 no.1
private int W;// width of the displayable
private int H;// height of the displayable
private int ImageW;// width of the image //add in 2008-5-14 no.5
private int ImageH;// height of the image //add in 2008-5-14 no.5
private int originX;//x coordinate of the origin
private int originY;//y coordinate of the origin
private Graphics dGraphics;
// private Graphics dGraphicsBackground; //add in 2008-5-14 no.4
public DrawSend drawSend;
private int commandCenter;
public boolean connected = false;
public boolean paintWhiteFlag = false;
final static int DRAW_LINE = 0;
final static int TRANSLATE_POINT = 1;
final static int REQUEST_SYNC = 2;
final static int ANSWER_SYNC = 3;
/*add in 2008-5-21*/
final static int ERASE =4;
final static int ZOOM_IN = 5;
final static int ZOOM_OUT = 6;
/*add in 2008-5-21*/
//debug
public MyClass(DrawMIDlet drawMIDlet){
this.drawMIDlet = drawMIDlet;
dataBags = new Vector();
exit = new Command("exit",Command.EXIT,1);
erase = new Command("erase",Command.SCREEN,1);
connect = new Command("connect",Command.SCREEN,1);
/*add in 2008-5-21*/
zoomIn = new Command("zoomIn",Command.SCREEN,1);
zoomOut = new Command("zoomOut",Command.SCREEN,1);
/*add in 2008-5-21*/
addCommand(connect);
// addCommand(exit);
// addCommand(erase);
setCommandListener(this);
isFirstPaint = true;
init();
}
private void init(){
H = getHeight();
W = getWidth();
originX = 0;
originY = 0;
}
/*2008-5-21
* zoom image*/
public Image zoomImage(Image image,int zoomW,int zoomH){
int[] rgbData = new int[ImageW*ImageH];
image.getRGB(rgbData, 0, ImageW, 0, 0, ImageW, ImageH);
int[] zoomedData = new int[zoomW*zoomH];
for(int x=0;x<zoomW;x++)
{
int tempX = x*ImageW/zoomW;
if((tempX*zoomW*2+ImageW)<=(2*ImageW*x))
tempX++;
for(int y=0;y<zoomH;y++){
int tempY = y*ImageH/zoomH;
if((tempY*zoomH*2+ImageH)<=(2*ImageH*y))
tempY++;
zoomedData[y*zoomW+x] = rgbData[tempY*ImageW+tempX];
}
}
Image zoomedImage = null;
zoomedImage = Image.createRGBImage(zoomedData, zoomW, zoomH, false);
return zoomedImage;
}
/*2008-5-21*/
synchronized public void paintAll(Graphics g){
if(!dataBags.isEmpty()){
int size = dataBags.size();
for(int i = 0;i<size;i++){
DataBag dataBag = (DataBag)dataBags.elementAt(i);
/*modify in 2008-5-21*/
if(dataBag.received)
{
if(dataBag.commandCenter == this.TRANSLATE_POINT)
{
originX = originX+dataBag.sX;
originY = originY+dataBag.sY;
paintWhiteFlag = true;
}
if(dataBag.commandCenter == this.DRAW_LINE)
{
dGraphics.drawLine(dataBag.sX, dataBag.sY, dataBag.eX, dataBag.eY);
}
if(dataBag.commandCenter == this.ERASE){
// System.err.println("erase received");
eraseFlag = true;
repaint();
}
if(dataBag.commandCenter == this.ZOOM_IN){
zoomIn();
}
if(dataBag.commandCenter == this.ZOOM_OUT){
zoomOut();
}
}
/*modify in 2008-5-21*/
if(!dataBag.received){
if(dataBag.commandCenter == this.DRAW_LINE)
{
dGraphics.drawLine(dataBag.sX, dataBag.sY, dataBag.eX, dataBag.eY);
}
if(connected == true)
drawSend.send(dataBag);
}
}
for(int j = 0;j<size;j++){
DataBag dataBag = (DataBag)dataBags.elementAt(0);
dataBags.removeElementAt(0);
}
}
/*
* add in 2008-5-14 no.5
* It won't translate when the edge of the picture arrives in the screen
*/
g.translate(originX,originY);
/*
* add in 2008-5-14 no.5
*/
if(dImage!=null)
{
// System.out.println("paintall - dImage!=null");
// System.out.println("W:"+dImageBackground.getWidth());
// System.out.println("H:"+dImageBackground.getHeight());
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
// g.drawImage(dImageBackground,0,0,Graphics.TOP|Graphics.LEFT); //add in 2008-5-14 no.3
g.drawImage(dImage,0,0,Graphics.TOP|Graphics.LEFT);
}
}
public void paint(Graphics g){
/*modify in 2008-5-21*/
if(isFirstPaint){
g.setColor(0, 0, 0);
g.drawRect(-getWidth(), -getHeight(), getWidth()*2, getHeight()*2);
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
try{
Image image = Image.createImage("/myImage.png");
/*
* add in 2008-5-14 no.5
*/
currentImage = image;
ImageW = image.getWidth();
ImageH = image.getHeight();
// System.out.println("ImageW:"+ImageW);
// System.out.println("ImageH:"+ImageH);
// dImageBackground = Image.createImage(ImageW,ImageH );
// dGraphicsBackground = dImageBackground.getGraphics();
// dGraphicsBackground.drawImage(image,0,0,Graphics.LEFT|Graphics.TOP);
/*
* add in 2008-5-14 no.5
*/
currentW = ImageW;
dImage = Image.createImage(ImageW,ImageH);
dGraphics = dImage.getGraphics();
dGraphics.drawImage(image,0,0,Graphics.LEFT|Graphics.TOP);
dataBags.removeAllElements();
}catch(IOException e){
e.printStackTrace();
}
isFirstPaint = false;
sX=0;
sY=0;
cX=0;
cY=0;
}
if(eraseFlag){
g.setColor(0, 0, 0);
g.drawRect(-getWidth(), -getHeight(), getWidth()*2, getHeight()*2);
g.setColor(250, 250, 250);
g.fillRect(0, 0, getWidth(), getHeight());
dImage = Image.createImage(currentW,currentW*ImageH/ImageW);
dGraphics = dImage.getGraphics();
dGraphics.drawImage(currentImage,0,0,Graphics.LEFT|Graphics.TOP);
// dataBags.removeAllElements();
eraseFlag = false;
sX=0;
sY=0;
cX=0;
cY=0;
}
/*modify in 2008-5-21*/
/* if(paintWhiteFlag == true){
dGraphics.setColor(255,255,255);
dGraphics.fillRect(-100, -100, 300, 100);
dGraphics.fillRect(-100, getHeight(), 300, 100);
dGraphics.fillRect(-100, 0, 100, getHeight());
dGraphics.fillRect(getWidth(), 0, 100, getHeight());
dGraphics.setColor(0,0,0);
paintWhiteFlag = false;
}*/
paintAll(g);
}
public void commandAction(Command command,Displayable displayable){
if(command == exit){
exit();
}
else if(command == erase){
eraseFlag = true;
DataBag dataBag = new DataBag(0,0,0,0,0,false,this.ERASE);
dataBags.addElement(dataBag);
repaint();
}
if(command == connect){
removeCommand(connect);
addCommand(exit);
addCommand(erase);
/*add in 2008-5-21*/
addCommand(zoomIn);
addCommand(zoomOut);
/*add in 2008-5-21*/
drawSend = new DrawSend(this);
drawSend.start();
}
/*add in 2008-5-21*/
if(command ==zoomIn){
DataBag dataBag = new DataBag(0,0,0,0,0,false,this.ZOOM_IN);
dataBags.addElement(dataBag);
zoomIn();
repaint();
}
if(command == zoomOut){
DataBag dataBag = new DataBag(0,0,0,0,0,false,this.ZOOM_OUT);
dataBags.addElement(dataBag);
zoomOut();
}
/*add in 2008-5-21*/
}
/*add in 2008-5-21*/
public void zoomIn(){
try{
// dGraphics.fillRect(0, 0, currentW, currentW*ImageH/ImageW);
currentW-=10;
Image image = Image.createImage("/myImage.png");
currentImage = zoomImage(image,currentW,currentW*ImageH/ImageW);
dImage = Image.createImage(currentW,currentW*ImageH/ImageW);
dGraphics = dImage.getGraphics();
dGraphics.drawImage(currentImage,0,0,Graphics.LEFT|Graphics.TOP);
// dImage = zoomImage(image,currentW,currentW*ImageH/ImageW);
// dGraphics = dImage.getGraphics();
}catch(IOException e){
e.printStackTrace();
}
repaint();
}
public void zoomOut(){
try{
currentW+=10;
Image image = Image.createImage("/myImage.png");
currentImage = zoomImage(image,currentW,currentW*ImageH/ImageW);
dImage = Image.createImage(currentW,currentW*ImageH/ImageW);
dGraphics = dImage.getGraphics();
dGraphics.drawImage(currentImage,0,0,Graphics.LEFT|Graphics.TOP);
}catch(IOException e){
e.printStackTrace();
}
repaint();
}
/*add in 2008-5-21*/
public void exit(){
drawSend.exitSend();
connected = false;
dataBags.removeAllElements();
drawMIDlet.exitMIDlet();
}
protected void keyPressed(int key){
DataBag dataBag = new DataBag(0,0,0,0,0,false,this.TRANSLATE_POINT);
paintWhiteFlag = true;
/*
* modify in 2008-5-14 no.5
*/
boolean changed = false;
// System.out.println("originX:"+originX+"originY:"+originY);
switch(this.getGameAction(key)){
case Canvas.UP:
// System.out.println("(originY+ImageH) <= H 则退出 "
// +originY+"+"+ImageH+"<="+H);
if((originY+ImageH) <= H)
break;
originY--;
dataBag.sY--;
changed = true;
break;
case Canvas.DOWN:
if(originY >= 0)
break;
originY++;
dataBag.sY++;
changed = true;
break;
case Canvas.RIGHT:
if(originX >= 0)
break;
originX++;
dataBag.sX++;
changed = true;
break;
case Canvas.LEFT:
if((originX+ImageW)<= W)
break;
originX--;
dataBag.sX--;
changed = true;
break;
}
if(changed == true){
dataBags.addElement(dataBag);
}
/*
* modify in 2008-5-14 no.5
*/
repaint();
}
protected void pointerPressed(int x,int y){
sX = (x-originX);
sY = (y-originY);
}
protected void pointerDragged(int x,int y){
cX = (x-originX);
cY = (y-originY);
if((cX<=0)||(cY<=0)||(cX>=(getWidth()-originX))||(cY>=(getHeight()-originY)))
{
sX = sY = -1;
return;
}
if((sX==-1) && (sY==-1)){
sX = cX;
sY = cY;
return;
}
if(!isFirstPaint){
//System.out.println("sX:"+sX+" sY:"+sY);
DataBag dataBag = new DataBag(0,sX,sY,cX,cY,false,this.DRAW_LINE);
dataBags.addElement(dataBag);
}
sX=cX;
sY=cY;
repaint();
}
protected void commandCenter(DataBag databag,int commandCenter){
switch(commandCenter){
case REQUEST_SYNC:
if(connected == true){
databag.sX = originX;
databag.sY = originY;
databag.commandCenter = ANSWER_SYNC;
drawSend.send(databag);
// System.out.println("REQUEST_SYNC");
}
else{
System.out.println("connection open");
}
break;
case ANSWER_SYNC:
originX = databag.sX;
originY = databag.sY;
repaint();
// System.out.println("ANSWER_SYNC");
case DRAW_LINE:
dataBags.addElement(databag);
repaint();
break;
case TRANSLATE_POINT:
dataBags.addElement(databag);
repaint();
break;
case ERASE:
dataBags.addElement(databag);
repaint();
break;
case ZOOM_IN:
dataBags.addElement(databag);
repaint();
break;
case ZOOM_OUT:
dataBags.addElement(databag);
repaint();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -