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

📄 pb.java

📁 纯粹为了赚分。。。一个可以实现绘图功能的java
💻 JAVA
字号:
import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 
import java.awt.geom.*; 
import java.io.*; 

class Point implements Serializable 
{ 
	int x,y; 
	Color col; 
	int tool; 
	int boarder; 
	Point(int x, int y, Color col, int tool, int boarder) 
	{ 
		this.x = x; 
		this.y = y; 
		this.col = col; 
		this.tool = tool; 
		this.boarder = boarder; 
	} 
} 


class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener 
{ 
	int x = -1, y = -1; 
	int con = 1;//画笔大小 
	int Econ = 5;//橡皮大小 
	int toolFlag = 0;//toolFlag:工具标记 
	//toolFlag工具对应表: 
	//(0--画笔);(1--橡皮);(2--清除); 
	//(3--直线);(4--圆);(5--矩形); 
	Color c = new Color(0,0,0); //画笔颜色 
	BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);//画笔粗细 
	Point cutflag = new Point(-1, -1, c, 6, con);//截断标志 
	Vector paintInfo = null;//点信息向量组 
	int n = 1; 
	FileInputStream picIn = null; 
	FileOutputStream picOut = null; 
	ObjectInputStream VIn = null; 
	ObjectOutputStream VOut = null; 
	// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/ 
	Panel toolPanel; 
	Button eraser, drLine,drCircle,drRect; 
	Button clear ,pen; 
	Choice ColChoice,SizeChoice,EraserChoice; 
	Button colchooser; 
	Label 颜色,大小B,大小E; 
	//保存功能 
	Button openPic,savePic; 
	FileDialog openPicture,savePicture; 
	paintboard(String s) 
	{ 
		super(s); 
		addMouseMotionListener(this); 
		addMouseListener(this); 
		paintInfo = new Vector(); 
		/*各工具按钮及选择项*/ 
			//颜色选择 
		ColChoice = new Choice(); 
		ColChoice.add("black"); 
		ColChoice.add("red"); 
		ColChoice.add("blue"); 
		ColChoice.add("green"); 
		ColChoice.addItemListener(this); 
		//画笔大小选择 
		SizeChoice = new Choice(); 
		SizeChoice.add("1"); 
		SizeChoice.add("3"); 
		SizeChoice.add("5"); 
		SizeChoice.add("7"); 
		SizeChoice.add("9"); 
		SizeChoice.addItemListener(this); //橡皮大小选择 
		EraserChoice = new Choice(); 
		EraserChoice.add("5"); 
		EraserChoice.add("9"); 
		EraserChoice.add("13"); 
		EraserChoice.add("17"); 
		EraserChoice.addItemListener(this); 
		//////////////////////////////////////////////////// 
		toolPanel = new Panel(); 
		clear = new Button("清除"); 
		eraser = new Button("橡皮"); 
		pen = new Button("画笔"); 
		drLine = new Button("画直线"); 
		drCircle = new Button("画圆形"); 
		drRect = new Button("画矩形"); 
		openPic = new Button("打开图画"); 
		savePic = new Button("保存图画"); 
		colchooser = new Button("显示调色板"); 
		//各组件事件监听 
		clear.addActionListener(this); 
		eraser.addActionListener(this); 
		pen.addActionListener(this); 
		drLine.addActionListener(this); 
		drCircle.addActionListener(this); 
		drRect.addActionListener(this); 
		openPic.addActionListener(this); 
		savePic.addActionListener(this); 
		colchooser.addActionListener(this); 
		颜色 = new Label("画笔颜色",Label.CENTER); 
		大小B = new Label("画笔大小",Label.CENTER); 
		大小E = new Label("橡皮大小",Label.CENTER); 
		//面板添加组件 
		toolPanel.add(openPic); 
		toolPanel.add(savePic); 
		toolPanel.add(pen); 
		toolPanel.add(drLine); 
		toolPanel.add(drCircle); 
		toolPanel.add(drRect); 
		toolPanel.add(颜色); toolPanel.add(ColChoice); 
		toolPanel.add(大小B); toolPanel.add(SizeChoice); 
		toolPanel.add(colchooser); 
		toolPanel.add(eraser); 
		toolPanel.add(大小E); toolPanel.add(EraserChoice); 
		
		toolPanel.add(clear); 
		//工具面板到APPLET面板 
		add(toolPanel,BorderLayout.NORTH); 
		setBounds(60,60,900,600); setVisible(true); 
		validate(); 
		//dialog for save and load 
		openPicture = new FileDialog(this,"打开图画",FileDialog.LOAD); 
		openPicture.setVisible(false); 
		savePicture = new FileDialog(this,"保存图画",FileDialog.SAVE); 
		savePicture.setVisible(false); 
		openPicture.addWindowListener(new WindowAdapter() 
		{ 
			public void windowClosing(WindowEvent e) 
			{
				openPicture.setVisible(false); 
			} 
		}); 
		
		savePicture.addWindowListener(new WindowAdapter() 
			{ 
			public void windowClosing(WindowEvent e) 
				{ savePicture.setVisible(false); } 
			}); 

			
			addWindowListener(new WindowAdapter() 
				{ 
				public void windowClosing(WindowEvent e) 
					{ System.exit(0);} 
				}); 
} 

public void paint(Graphics g) 
{ 
	Graphics2D g2d = (Graphics2D)g; 
	Point p1,p2; 
	n = paintInfo.size(); 
	if(toolFlag==2) 
		g.clearRect(0,0,getSize().width,getSize().height);//清除 
	for(int i=0; i<n ;i++){ 
		p1 = (Point)paintInfo.elementAt(i); 
		p2 = (Point)paintInfo.elementAt(i+1); 
		size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); 
		g2d.setColor(p1.col); 
		g2d.setStroke(size); 
		if(p1.tool==p2.tool) 
			{ 
			switch(p1.tool) 
			{
				case 0://画笔 
				Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); 
				g2d.draw(line1);
				break; 
				case 1://橡皮 
				g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder); 
				break; 
				case 3://画直线 
				Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); 
				g2d.draw(line2); 
				break; 
				case 4://画圆 
				Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y)); 
				g2d.draw(ellipse); 
				break; 
				case 5://画矩形 
				Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y)); 
				g2d.draw(rect); 
				break; 
				case 6://截断,跳过 
				i=i+1; 
				break; 
				default : 
				}//end switch 
			}//end if 
		}//end for 
	} 
	
	public void itemStateChanged(ItemEvent e) 
		{ 
		if(e.getSource()==ColChoice)//预选颜色 
		{ 
			String name = ColChoice.getSelectedItem(); 
			if(name=="black") 
				{c = new Color(0,0,0); } 
			else if(name=="red") 
				{c = new Color(255,0,0);} 
			else if(name=="green") 
				{c = new Color(0,255,0);} 
			else if(name=="blue") 
				{c = new Color(0,0,255);} 
			} 
			else if(e.getSource()==SizeChoice)//画笔大小 
			{ 
				String selected = SizeChoice.getSelectedItem();
				if(selected=="1") 
					{ 
					con = 1; 
					size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); 
					} 
					else if(selected=="3") 
						{ 
						con = 3; 
						size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); 
						} 
						else if(selected=="5") 
							{con = 5; 
						size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); 
						} 
						else if(selected=="7") 
							{con = 7; 
						size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); 
						} 
						else if(selected=="9") 
							{con = 9; 
						size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); 
						} 
			} 
			else if(e.getSource()==EraserChoice)//橡皮大小 
			{ 
				String Esize = EraserChoice.getSelectedItem(); 
				if(Esize=="5") 
					{ Econ = 5*2; } 
				else if(Esize=="9") 
					{ Econ = 9*2; } 
				else if(Esize=="13") 
					{ Econ = 13*2; } 
				else if(Esize=="17") 
					{ Econ = 17*3; } 
				} 
				} 
				public void mouseDragged(MouseEvent e) 
					{ 
					Point p1 ; 
					switch(toolFlag){ 
						case 0://画笔 
						x = (int)e.getX(); 
						y = (int)e.getY(); 
						p1 = new Point(x, y, c, toolFlag, con); 
						paintInfo.addElement(p1); 
							repaint(); 
						break; 
						case 1://橡皮 
						x = (int)e.getX(); 
						y = (int)e.getY(); 
						p1 = new Point(x, y, null, toolFlag, Econ); 
						paintInfo.addElement(p1); 
						repaint(); 
						break; 
						default : 
					} 
  } 

	public void mouseMoved(MouseEvent e) {} 

	public void update(Graphics g) 
	{ 
	paint(g);	
	} 


	public void mousePressed(MouseEvent e) 
	{ 
		Point p2; 
		switch(toolFlag){ 
			case 3://直线 
					x = (int)e.getX(); 
					y = (int)e.getY(); 
					p2 = new Point(x, y, c, toolFlag, con); 
					paintInfo.addElement(p2); 
					break; 

			case 4: //圆 
					x = (int)e.getX(); 
					y = (int)e.getY(); 
					p2 = new Point(x, y, c, toolFlag, con); 
					paintInfo.addElement(p2); 
					break; 

			case 5: //矩形 
					x = (int)e.getX(); 
					y = (int)e.getY(); 
					p2 = new Point(x, y, c, toolFlag, con); 
					paintInfo.addElement(p2); 
					break; 

					default : 
				} 
	} 

	public void mouseReleased(MouseEvent e) 
	{ 
		Point p3; 
		switch(toolFlag){ 
			case 0://画笔 
			paintInfo.addElement(cutflag); 
			break; 
			
			case 1: //eraser 
			paintInfo.addElement(cutflag); 
			break; 
			
			case 3://直线 
			x = (int)e.getX(); 
			y = (int)e.getY(); 
			p3 = new Point(x, y, c, toolFlag, con); 
			paintInfo.addElement(p3); 
			paintInfo.addElement(cutflag); 
			repaint(); 
			break; 
			
			case 4: //圆 
			x = (int)e.getX(); 
			y = (int)e.getY(); 
			p3 = new Point(x, y, c, toolFlag, con); 
			paintInfo.addElement(p3); 
			paintInfo.addElement(cutflag); 
			repaint(); 
			break; 

			case 5: //矩形 
			x = (int)e.getX(); 
			y = (int)e.getY(); 
			p3 = new Point(x, y, c, toolFlag, con); 
			paintInfo.addElement(p3); 
			paintInfo.addElement(cutflag); 
			repaint(); 
			break; 

			default: 
		} 
	} 

	public void mouseEntered(MouseEvent e){} 

	public void mouseExited(MouseEvent e){} 

	public void mouseClicked(MouseEvent e){} 

	public void actionPerformed(ActionEvent e) 
	{ 

		if(e.getSource()==pen)//画笔 
		{toolFlag = 0;} 

		if(e.getSource()==eraser)//橡皮 
		{toolFlag = 1;} 

		if(e.getSource()==clear)//清除 
		{ 
		toolFlag = 2; 
		paintInfo.removeAllElements(); 
		repaint(); 
		} 

		if(e.getSource()==drLine)//画线 
		{toolFlag = 3;} 

		if(e.getSource()==drCircle)//画圆 
		{toolFlag = 4;} 

		if(e.getSource()==drRect)//画矩形 
		{toolFlag = 5;} 

		if(e.getSource()==colchooser)//调色板 
		{ 
		Color newColor = JColorChooser.showDialog(this,"调色板",c); 
		c = newColor; 
} 

	if(e.getSource()==openPic)//打开图画 
	{ 

		openPicture.setVisible(true); 

		if(openPicture.getFile()!=null) 
		{ 
			int tempflag; 
			tempflag = toolFlag; 
			toolFlag = 2 ; 
			repaint(); 
			try{ 
				paintInfo.removeAllElements(); 
				File filein = new File(openPicture.getDirectory(),openPicture.getFile()); 
				picIn = new FileInputStream(filein); 
				VIn = new ObjectInputStream(picIn); 
				paintInfo = (Vector)VIn.readObject(); 
				VIn.close(); 
				repaint(); 
				toolFlag = tempflag; 
				} 

			catch(ClassNotFoundException IOe2) 
				{ 
				repaint(); 
				toolFlag = tempflag; 
				System.out.println("can not read object"); 
				} 
			catch(IOException IOe) 
				{ 
				repaint(); 
				toolFlag = tempflag; 
				System.out.println("can not read file"); 
			} 
		} 
	
		}	 
	
		if(e.getSource()==savePic)//保存图画 
		{ 
			savePicture.setVisible(true); 
			try{ 
				File fileout = new File(savePicture.getDirectory(),savePicture.getFile()); 
			picOut = new FileOutputStream(fileout); 
			VOut = new ObjectOutputStream(picOut); 
			VOut.writeObject(paintInfo); 
			VOut.close(); 
		} 
		catch(IOException IOe) 
		{ 
		System.out.println("can not write object"); 
		} 
	} 
	} 
}//end paintboard 

public class pb 
{
	public static void main(String args[]) 
		{ new paintboard("画图程序"); } 
}

⌨️ 快捷键说明

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