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

📄 paintbrush.java

📁 一个简单的画图板JAVA程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		}	
	}
	
	/**
	 * author 吴权达<br>
	 * version 1.0 07-6-16<br>
	 * author 吴权达<br>
	 * version 2.0 07-6-20<br>
	 * 保存文件方法<br>
	 */
	public void saveFile()
	  
	{    
		try
		{
			JFileChooser fileChooser=new JFileChooser();
			fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
			int result =fileChooser.showSaveDialog(this);
			if(result==JFileChooser.CANCEL_OPTION)
				return ;
			File fileName=fileChooser.getSelectedFile();
			String path=fileName.getPath();
			BufferedImage outImage=new BufferedImage(drawArea.getWidth(),drawArea.getHeight(),BufferedImage.TYPE_INT_RGB);
 			g = outImage.getGraphics();
 			drawArea.paintComponent(g);
			ImageIO.write(outImage,"jpg",new File(path));
		}
		
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * author 吴权达<br>
	 * version 1.0 07-6-16<br>
	 * author 吴权达<br>
	 * version 2.0 07-6-20<br>
	 * 新建文件方法<br>
	 */
	public void newFile(){
		
		num=0;
		toolFlag = 0;
		color=Color.black;
		stroke=1.0f;
		length=0;
		drawShape();
		repaint();  //将有关值设置为初始状态,并且重画
	}
	
	/**
	 * author 宋飞<br>
	 * version 1.0 07-6-16<br>
	 * author 宋飞<br>
	 * version 2.0 07-6-20<br>
	 * 颜色选择方法,用于选择当前颜色<br>
	 */
	public void chooseColor(){
		
		
		color = JColorChooser.showDialog(PaintBrush.this, "请选择颜色", color);
		
		if(color==null)
			color=Color.BLACK;
		
		R = color.getRed();
		G = color.getGreen();
		B = color.getBlue();
		shape[num].R = R;
		shape[num].G = G;
		shape[num].B = B;
	}
	
	/**
	 * author 吴权达<br>
	 * version 1.0 07-6-16<br>
	 * author 吴权达<br>
	 * version 2.0 07-6-20<br>
	 * 用于创建与当前工具标记相应的图形对象<br>
	 */
    public void drawShape(){
    	
		
		switch(toolFlag){
		 //读取当前工具标记值并作出响应动作,绘制相应图形对象
		case 0 :
			shape[num] =  new Pencil();
			break;
			
		case 1:
			shape[num] = new Brush();
			break;
		
		case 2:
			shape[num] = new Line();
			break;
		
		case 3:
			shape[num] = new Oval();
			break;
		
		case 4:
			shape[num] = new FillOval();
			break;
		
		case 5:
			shape[num] = new Rectangle();
			break;
			
		case 6:
			shape[num] = new FillRectangle();
			break;
			
		case 7:
			shape[num] = new RoundRect();
			break;
		
		case 8:
			shape[num] = new FillRoundRect();
			break;
		
		case 9:
			shape[num] = new PolyGon();
			break;
			
		case 10:
			shape[num] = new Eraser();
			break;
			
		case 11:
			shape[num] = new Text();
			break;
		case 12:
			shape[num] = new Undo();
			break;
		
		}//end switch

        //以下代码设置当前颜色,线形,橡皮大小等状态
		shape[num].stroke = stroke;
		shape[num].eraserStroke=eraserStroke;
		shape[num].R = R;
		shape[num].G = G;
		shape[num].B = B;
	}//end drawShape
	
    
    /**
	 * @author 李佶,吴权达
	 * @version 1.0 07-6-20
	 * @see javax.swing.JPanel
	 * @see DrawPanel 功能:用于实现画图区域的各项绘图功能
	 */
	class DrawPanel extends JPanel
	{
		public DrawPanel()
		{
			setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));//设置鼠标的形状,为crosshair
			setBackground(Color.WHITE);
			addMouseListener(new MouseA());//加入以上的mouseListener
			addMouseMotionListener(new MouseB());
			
		}
		
		public void paintComponent(Graphics g)//实现画图区域的图形绘制
		{ 
			super.paintComponent(g);
			if(image!=null){g.drawImage(image, 0, 0, this);}  
			Graphics2D g2d = (Graphics2D)g;
			
			
			int i = 0;
			while (i <= num) {
				draw(g2d, shape[i]);
				i++;
			}
			
			
			if(toolFlag==9)   //如果当前工具标记为多边形,调用相应方法绘制 
				g2d.drawPolyline(xpoint, ypoint, length);
		}
		
	
	
		
		/**
		 * @author 宋飞
		 * @version 1.0 07-6-19
		 * @version 2.0 07-6-20
		 * @see MouseA 功能:实现了画图区域中的鼠标事件,包括点击和松开鼠标
		 */
	class MouseA extends MouseAdapter{
		
		public void mousePressed(MouseEvent event)
		{
			
			shape[num].x1 =shape[num].x2= event.getX();
			shape[num].y1 =shape[num].y2 =event.getY();
			
			if(toolFlag == 0||toolFlag == 1 || toolFlag == 10)
				  //当绘图按钮选择的是铅笔,画刷和橡皮时所对应的方法
			{
				shape[num].x1 = shape[num].x2 = event.getX();
				shape[num].y1 = shape[num].y2 = event.getY();
				num++;
				drawShape();
				
			}
			if(toolFlag == 9)
			{			  //当绘图按钮选择的多边形时所对应的方法
				xpoint[length] = event.getX();
				ypoint[length] = event.getY();
				length++;
				polygon.addPoint(event.getX(), event.getY());

				if (length != 1 && Math.abs(event.getX() - xpoint[0]) < 10
						&& Math.abs(event.getY() - ypoint[0]) < 10) {
					shape[num].polygon = polygon;
					length = 0;
					polygon = new java.awt.Polygon();
					num++;
					drawShape();
					repaint();
				}
			}
			
			
			
			
			if(toolFlag == 11)
			{  //绘图按钮选择的是Text时所对应的方法
				String input;
				input = JOptionPane.showInputDialog("请输入要插入的文字: ");
				shape[num].inS = input;
				shape[num]. fon= font;
				shape[num].sty = style;
				
				num++;
				drawShape();
				drawArea.repaint();
			}
		}
		
		public void mouseReleased(MouseEvent event)
		{
			if(toolFlag == 0 || toolFlag == 1 || toolFlag == 10){
             //当前工具为铅笔画刷或橡皮是对应的方法
				shape[num].x1 = event.getX();
				shape[num].y1 = event.getY();
			}
			if(toolFlag==9)
			{//当绘图按钮选择的多边形时所对应的方法
				repaint();
				return;
			}
			else
			{
				shape[num].x2 = event.getX();
				shape[num].y2 = event.getY();
			}
			undoStep[undoIndex++] = num;
			repaint();
			num++;
			drawShape();
		}
		

		
		
	}//end MouseA
	
	/**
	 * @author 宋飞
	 * @version 1.0 07-6-14
	 * @version 2.0 07-6-19
	 * @see MouseB 功能:实现鼠标事件功能
	 */
	class MouseB extends MouseMotionAdapter{
		
		public void mouseDragged(MouseEvent e){
			 //当前工具为铅笔画刷或橡皮是对应的方法
			if(toolFlag == 0 || toolFlag == 1 || toolFlag == 10)
			{
				shape[num-1].x1 = shape[num].x2 = shape[num].x1 = e.getX();
				shape[num-1].y1 = shape[num].y2 = shape[num].y1 = e.getY();
				num++;
				drawShape();
				shape[num].x2 = shape[num].x1 = e.getX();
				shape[num].y2 = shape[num].y1 = e.getY();
			}
			if(toolFlag==9)
			{
				return;
			}
			else
			{
				shape[num].x2 = e.getX();
				shape[num].y2 = e.getY();
			}
			repaint();
		}
		
	}//MouseB
	
		
		
		public void draw(Graphics2D g2d, Shape a) {
			a.draw(g2d); // 将画笔传入到各个子类中,用来完成各自的绘图
		}

	}
			
	
	
	public static void main(String args[]){
		PaintBrush application = new PaintBrush();
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-16
	 * @see  Pencil 功能:实现功能铅笔随意画
	 */
	private class Pencil extends Shape{
		void draw(Graphics2D g2d){
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(1.0f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
			g2d.drawLine(x1,y1,x2,y2);
		}//draw
		
	}//Pencil
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-16
	 * @see Brush 功能:实现功能画刷随意画
	 */
	class Brush extends Shape{
		void draw(Graphics2D g2d){
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
			g2d.drawLine(x1,y1,x2,y2);
		}//draw
	}//Brush
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-17
	 * @see Line 功能:实现功能直线
	 */
	class Line extends Shape{
		void draw(Graphics2D g2d){
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
			g2d.drawLine(x1,y1,x2,y2);
		}//draw
	}//Line
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-17
	 * @see Oval 功能:实现功能椭圆
	 */
	class Oval extends Shape{
		void draw(Graphics2D g2d){
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
			g2d.drawOval(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), Math.abs(y1-y2));
		}
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-18
	 * @see FillOval 功能:实现功能实心椭圆
	 */
	class FillOval extends Shape{
		void draw(Graphics2D g2d)
		{
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke));
			g2d.fillOval(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), Math.abs(y1-y2));
		}
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-18
	 * @see Rectangle 功能:实现功能矩形
	 */
	class Rectangle extends Shape{
		void draw(Graphics2D g2d)
		{
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke));
			g2d.drawRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), Math.abs(y1-y2));
		}
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-19
	 * @see FillRectangle 功能:实现功能实心椭圆
	 */
	class FillRectangle extends Shape{
		void draw(Graphics2D g2d)
		{
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke));
			g2d.fillRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), Math.abs(y1-y2));
		}
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-19
	 * @see  RoundRect 功能:实现功能圆角矩形
	 */
	class RoundRect extends Shape{
		void draw(Graphics2D g2d)
		{
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke));
			g2d.drawRoundRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), 
					Math.abs(y1-y2), 50, 35);
		}
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-19
	 * @see FillRoundRect 功能:实现功能实心圆角矩形
	 */
	class FillRoundRect extends Shape{
		void draw(Graphics2D g2d)
		{
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke));
			g2d.fillRoundRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), 
					Math.abs(y1-y2), 50, 35);
		}
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-20
	 * @see  PolyGon 功能:实现功能多边形
	 */
	class PolyGon extends Shape{
		void draw(Graphics2D g2d)
		{
			g2d.setPaint(new Color(R,G,B));
			g2d.setStroke(new BasicStroke(stroke));
			
			g2d.drawPolygon(polygon);
		}
		
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-20
	 * @see Eraser 功能:实现功能橡皮
	 */
	class Eraser extends Shape{
		void draw(Graphics2D g2d)
		{
			g2d.setPaint(Color.WHITE);
			g2d.setStroke(new BasicStroke(eraserStroke,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL));
			g2d.drawLine(x1,y1,x2,y2);
		}
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-21
	 * @see Text 功能:实现功能文字添加
	 */
	class Text extends Shape{
		void draw(Graphics2D g2d)
		{
			g2d.setPaint(new Color(R,G,B));
			g2d.setFont(new Font(fon,sty , ((int)stroke * 18)));
			if(inS != null)
			g2d.drawString(inS,x1,y1);
		}
	}
	
	/**
	 * @author  宋飞 
	 * @version 1.0 07-6-21
	 * @see Undo 功能:实现功能撤销
	 */
	class Undo extends Shape{
		void draw(Graphics2D g2d)
		{
			num = undoStep[undoIndex-1];
			
			if(undoIndex>1)
				undoIndex--;
		}
	}
}


	
	

⌨️ 快捷键说明

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