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

📄 drawmidlet.java

📁 自己编写的一个java电子白板程序
💻 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 + -