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

📄 mycanvas.java

📁 java实现的简单的画图软件
💻 JAVA
字号:
package com.catking.middle;

import com.catking.buttom.*;
import com.catking.left.*;
import com.catking.mainFrm.*;

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.*;

public class MyCanvas extends Composite 
							implements DrawConstants {
	
	private Cursor currentCur;
	private Shell shell;
	private ButtonPane bp;
	private ColorPane cp;
	private Point originP;
	private Image img;
	private boolean isDraging = false;
	private static final int OFFSET_X = 13;
	private static final int OFFSET_Y = 22;
	private static final int LEFT_RIGHT =  4;
	private static final int RIGHT_BUTTOM =  5;
	private static final int UP_DOWN =  6;
	

	public MyCanvas(Shell shell, ButtonPane bp, ColorPane cp){

		super(shell, SWT.BORDER);
		this.shell = shell;
		this.bp = bp;
		this.cp = cp;
		
		this.setSize(500, 500);
		this.img = new Image(
				Display.getDefault(), this.getSize().x, this.getSize().y);
		
		this.changeCursor(PEN);
		this.setForeground(
				Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
		hookEvent();

	}
	/*
	private void buildGUI(){
		
		//Canvas 的控制点
		WhiteSquare square = new WhiteSquare(comp);
		square.setLocation(0, 0);
		
		canvas = new MyCanvas(comp, bp, cp);
		rect = canvas.getBounds();
		canvas.setLocation(rect.width, 0);
		
		square = new WhiteSquare(shell);
		data = new FormData(GAP, GAP);
		data.top = new FormAttachment(0, 0);
		data.left = new FormAttachment(canvas, 0, SWT.CENTER);
		square.setLayoutData(data);
		
		square = new WhiteSquare(shell);
		data = new FormData(GAP, GAP);
		data.top = new FormAttachment(0, 0);
		data.left = new FormAttachment(canvas, 0);
		square.setLayoutData(data);
		
		square = new WhiteSquare(shell);
		data = new FormData(GAP, GAP);
		data.left = new FormAttachment(bp,  0);
		data.top = new FormAttachment(canvas, 0, SWT.CENTER);
		square.setLayoutData(data);
		
		square = new WhiteSquare(shell);
		data = new FormData(GAP, GAP);
		data.left = new FormAttachment(bp, 0);
		data.top = new FormAttachment(canvas, 0);
		square.setLayoutData(data);
		
		ResizeSquare rs = new ResizeSquare(shell, UP_DOWN, canvas);
		data = new FormData(GAP, GAP);
		data.left = new FormAttachment(canvas, 0, SWT.CENTER);
		data.top = new FormAttachment(canvas,0);
		rs.setLayoutData(data);
		
		rs = new ResizeSquare(shell, RIGHT_BUTTOM, canvas);
		data = new FormData(GAP, GAP);
		data.left = new FormAttachment(canvas, 0);
		data.top = new FormAttachment(canvas, 0);
		rs.setLayoutData(data);
		
		rs = new ResizeSquare(shell, LEFT_RIGHT, canvas);
		data = new FormData(GAP, GAP);
		data.left = new FormAttachment(canvas, 0);
		data.top = new FormAttachment(canvas, 0, SWT.CENTER);
		rs.setLayoutData(data);
	}*/
	private void hookEvent(){
		//resize 
		this.addControlListener(new ControlAdapter() {

			public void controlResized(ControlEvent e) {
				
				Image img = new Image(
								Display.getDefault(), 
								MyCanvas.this.getSize().x, 
								MyCanvas.this.getSize().y);	
				GC gc = new GC(img);
				gc.drawImage(MyCanvas.this.img, 0, 0);
				gc.dispose();
				
				MyCanvas.this.img.dispose();
				MyCanvas.this.img = img;
				
			}
		});
		//mouse move
		this.addMouseMoveListener(new MouseMoveListener(){

			public void mouseMove(MouseEvent e) {
				
				shell.setText("未命名-画图 "+e.x+","+e.y);
				if(isDraging){
					if(bp.getAction() == PEN)
						paintDoodle(e);
					else if(bp.getAction() == LINE)
						paintLine(e.x, e.y);
				}
			}
		});
		this.addMouseListener(new MouseAdapter(){

			public void mouseDown(MouseEvent e) {
				originP = new Point(e.x + OFFSET_X, e.y + OFFSET_Y);
				
			}
			public void mouseUp(MouseEvent e) {
				
				isDraging = false;
				if(bp.getAction() == LINE)
					paintFinalLine(new Point(e.x, e.y));
			}
			
		});
		this.addMouseTrackListener(new MouseTrackAdapter(){
			public void mouseEnter(MouseEvent e) {
				switch(bp.getAction()){
				
				case PEN:case LINE:case FILL:
					changeCursor(bp.getAction());
				break;
				
				case EXTRACT:case SPRINKLE:case TEXT:
				case RASE:case MAG:case BRUSH:	break;
				
				default:
					changeCursor(LINE);
					break;
				}
			}
		});
		//鼠标在拖动过程中
		this.addDragDetectListener(new DragDetectListener(){
			public void dragDetected(DragDetectEvent e) {
					isDraging = true;
			}
			
		});
		this.addPaintListener(new PaintListener(){
			public void paintControl(PaintEvent e) {
				
				e.gc.drawImage(img, 0, 0);
			}
			
		});
		
	}
	private void paintFinalLine(Point p){
		
		GC gc = new GC(img);
		gc.setForeground(cp.getCurrentColor());
		gc.drawLine(originP.x, originP.y, p.x + OFFSET_X, p.y + OFFSET_Y);
		gc.dispose();
		this.redraw(originP.x, originP.y, 50, 50, true);
	}
	private void paintLine(int x, int y){
		
		/*GC gc = new GC(img);
		gc.setForeground(cp.getCurrentColor());
		gc.drawLine(originP.x, originP.y, x + OFFSET_X, y + OFFSET_Y);
		gc.dispose();
		this.redraw();*/
	}
	
	private void paintDoodle(MouseEvent  e){
		
		GC gc = new GC(img);
		gc.setForeground(cp.getCurrentColor());
		gc.drawLine(originP.x, originP.y, e.x + OFFSET_X, e.y + OFFSET_Y);
		gc.dispose();
		this.redraw(originP.x, originP.y, 50, 50, true);
		this.update();
		originP.x = e.x + OFFSET_X;
		originP.y = e.y + OFFSET_Y;
	}
	public void changeCursor(int style){

		this.currentCur = SourceManager.curs[style];
		this.setCursor(this.currentCur);
	}

}

⌨️ 快捷键说明

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