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

📄 drawfigurepanel.java

📁 java实现的版画图程序
💻 JAVA
字号:
package drawfigure;import java.awt.Graphics;import java.awt.Point;import java.awt.event.MouseEvent;import java.awt.event.*;import javax.swing.JPanel;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: </p> * @author 孙明辉 * @version 1.0 */public class DrawFigurePanel extends JPanel {  //atribuits  public static final int SELECT=0;  public static final int LINE=1;  public static final int RECTANGLE=2;  public static final int OVAL=3;  /**  * 当前工具类型,它可能和当前的图形(currFigure)不一致,比如:用SELECT工具选中一个RectangleFigure  * 那么,当前工具类型=SELECT,而当前图形=RectangleFigure  */  private int currToolType=-1;  private Figure currFigure=null;  private Figures figures=new Figures();    private Point dragStartPoint, dragEndPoint; //拖放图形时的起始坐标和终止坐标    public void setCurrentToolType(int type){    currToolType=type;  }  public int getCurrentToolType(){    return currToolType;  }    public void setCurrentFigure(Figure figure){    currFigure=figure;  }  public Figure getCurrentFigure(){    return currFigure;  }  public Figures getFigures(){    return figures;  }  public void setFigures(Figures f){    figures=f;  }  //public Document document;  //methods  public DrawFigurePanel() {    try {      jbInit();    }    catch(Exception e) {      e.printStackTrace();    }  }  private void jbInit() throws Exception {    this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {      public void mouseDragged(MouseEvent e) {        this_mouseDragged(e);      }      public void mouseMoved(MouseEvent e){      	this_mouseMoved(e);      }    });    this.addMouseListener(new java.awt.event.MouseAdapter() {      public void mouseClicked(MouseEvent e) {        this_mouseClicked(e);      }      public void mousePressed(MouseEvent e) {        this_mousePressed(e);      }      public void mouseReleased(MouseEvent e) {        this_mouseReleased(e);      }    });       ////通常按键的时候焦点在其他控件上,而不是在本Panel上,所以此代码基本没有用    //this_keyPressed(e)方法被frame的key事件调用才能生效   this.addKeyListener(new KeyAdapter(){   		public void keyPressed(KeyEvent e){   	  this_keyPressed(e);   	}        });   ////  }//end jbIni()  //鼠标单击  void this_mouseClicked(MouseEvent e) {  //  }  //拖动鼠标的时候  void this_mouseDragged(MouseEvent e) {    if(currFigure==null){return;}        Graphics g=this.getGraphics();    g.setXORMode(this.getBackground());        //System.out.println(currFigure+"\nismoving="+currFigure.isMoving()+"@mouseDrag");        //如果是选择工具    if(currToolType==SELECT){	    	    	    dragEndPoint=e.getPoint();				if(currFigure.isMoving()){//如果当前图形可以移动,说明在移动图形	      		 	currFigure.move(g,dragEndPoint.x-dragStartPoint.x,dragEndPoint.y-dragStartPoint.y);		}else if(currFigure.isResizing()){//如果当前图形可以变形,说明在变形			currFigure.resize(g,dragEndPoint.x-dragStartPoint.x,dragEndPoint.y-dragStartPoint.y);		}		dragStartPoint=dragEndPoint;		return;	}else{	    //如果是画图	    if(currFigure.isFirstDraw()){	      currFigure.draw(g);	      currFigure.setFirstDraw(false);	      if(!(currFigure instanceof SelectFigure)){figures.add(currFigure);}//在此处加进去是否合适?	    }else{			currFigure.draw(g);			currFigure.setEndPoint(e.getPoint());			currFigure.draw(g);          	    }	}	//g.setPaintMode();  }//鼠标移动的时候  void this_mouseMoved(MouseEvent e){  	this.setCursor(figures.getCursor(e.getPoint()));  	  }//按下鼠标的时候  void this_mousePressed(MouseEvent e) {  	//如此多的重复代码,有待改进===      switch(currToolType){        case LINE: currFigure=new LineFigure(e.getPoint());	         currFigure.setDrawing(true);	         //currFigure.setStartEndPoint(e.getPoint(),e.getPoint());//鼠标按下时起点=终点	         currFigure.setFirstDraw(true);        	 break;         case RECTANGLE: currFigure=new RectangleFigure(e.getPoint());        	 currFigure.setDrawing(true);	         //currFigure.setStartEndPoint(e.getPoint(),e.getPoint());//鼠标按下时起点=终点	         currFigure.setFirstDraw(true);        	 break;        case OVAL:currFigure=new OvalFigure();        	 currFigure.setDrawing(true);	         currFigure.setStartEndPoint(e.getPoint(),e.getPoint());//鼠标按下时起点=终点	         currFigure.setFirstDraw(true);             break;        case SELECT:        	 Figure tmpFigure=figures.getFigureFromPoint(e.getPoint());        	         	 //如果没有选中了图形,把上次选中的图形设置为未选中        	 if(tmpFigure==null){        	 	System.out.println("select none!:(");        	   if((currFigure!=null)&&(currFigure.isSelected())){        	   		currFigure.unSelected();        	   		repaint();        	   	}        	 }else{        	 	//如果选中一个图形,但是不是当前图形(上次选中的,或者上次画的),则把这次选中的设置为当前图形        	 	if(!tmpFigure.equals(currFigure)){        	   		currFigure.unSelected();        	   		        	   		currFigure=tmpFigure;        	 	}        	 	currFigure.selected();        	 	        	            	 	repaint();        	 	//如果鼠标在控制块内,则要改变图形,否则是移动图形				ControlRect ctrl;        	 	if((ctrl=currFigure.getControlRect(e.getPoint()))!=null){        	 	  	currFigure.setResizing(true,ctrl.getPosition());        	 	}else{        	 										currFigure.setMoving(true);        	 	}        	 	        	 	dragStartPoint=e.getPoint();        	 }//end if        	  //end SELECT case      	}//end switch }//释放鼠标的时候  void this_mouseReleased(MouseEvent e) {    if(currFigure!=null){    	currFigure.setFirstDraw(false);    	currFigure.setDrawing(false);    	currFigure.setMoving(false);    	currFigure.setResizing(false);    }      }  protected void paintComponent(Graphics g) {    /**@todo Override this javax.swing.JComponent method*/    super.paintComponent(g);    g.setXORMode(this.getBackground());    if(figures!=null)    for(int i=0;i<figures.size();i++){      Object x=figures.get(i);      if(x instanceof LineFigure){        LineFigure lineFigure=(LineFigure)x;        lineFigure.draw(g);      }      if(x instanceof RectangleFigure){        RectangleFigure recFigure=(RectangleFigure)x;        recFigure.draw(g);      }      if(x instanceof OvalFigure){        OvalFigure ovalFigure=(OvalFigure)x;        ovalFigure.draw(g);      }    }        //System.out.println("figures number="+figures.size());    //figures.printAllFigures();  }    public void this_keyPressed(KeyEvent e){    if(e.getKeyCode()==KeyEvent.VK_DELETE){      if((currFigure!=null)&&(currFigure.isSelected())){		figures.remove(currFigure);		repaint();	      }          }  }}

⌨️ 快捷键说明

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