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

📄 drawbymouse.java

📁 JAVA画图程序
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class DrawByMouse
{
	public static void main(String[] args) 
	{
		MouseFrame frame = new MouseFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.show();
	}
}

class MouseFrame extends JFrame
{
	public MouseFrame()
	{
		setTitle("利用鼠标画图");
		setSize(WIDTH, HEIGHT);
		// 将panel加入到frame
		MousePanel panel = new MousePanel();
		Container contentPane = getContentPane();
		contentPane.add(panel);	
	}
	public static final int WIDTH = 800;
	public static final int HEIGHT = 600;
}
class MousePanel extends JPanel
{
	public MousePanel()
	{
		startfaces=new ArrayList();
		endfaces=new ArrayList();
		facetypes=new ArrayList();
		points=new ArrayList();
		JButton button1=new JButton("画直线");
		JButton button2=new JButton("画矩形");
		JButton button3=new JButton("画椭圆");
		JButton button4=new JButton("自由绘图");
		ButtonAction action1=new ButtonAction(1);
		ButtonAction action2=new ButtonAction(2);
		ButtonAction action3=new ButtonAction(3);
		ButtonAction action4=new ButtonAction(4);
		button1.addActionListener(action1);
		button2.addActionListener(action2);
		button3.addActionListener(action3);
		button4.addActionListener(action4);
		add(button1);
		add(button2);
		add(button3);
		add(button4);
		addMouseListener(new MouseHandler());
		addMouseMotionListener(new MouseMotionHandler());
	}
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		//do something for drawing;
		int xx1=0,yy1=0,xx2=0,yy2=0;//用于显示即时图像
		int i=0,j=0;//用于循环
		//显示即时图像
		//判断起点是否大于终点,用于显示即时图像
		if(x1>x2)
		{
			xx1=x2;
			xx2=x1;
		}
		else
		{
			xx1=x1;
			xx2=x2;
		}
		if(y1>y2)
		{
			yy1=y2;
			yy2=y1;
		}
		else
		{
			yy1=y1;
			yy2=y2;
		}
		if(clickid==1)
		{
			g.drawLine(x1,y1,x2,y2);
		}
		else if(clickid==2)
		{
			g.drawRect(xx1,yy1,xx2-xx1,yy2-yy1);
		}
		else if(clickid==3)
		{
			g.drawOval(xx1,yy1,xx2-xx1,yy2-yy1);
		}
		//显示所有图像
		for(i=0;i<endfaces.size();i++)
		{
			String type=(String)facetypes.get(i);
			xx1=startPointX=((Point)startfaces.get(i)).x;
			yy1=startPointY=((Point)startfaces.get(i)).y;
			xx2=endPointX=((Point)endfaces.get(i)).x;
			yy2=endPointY=((Point)endfaces.get(i)).y;
			if(startPointX>endPointX)
			{
				xx1=endPointX;
				xx2=startPointX;
			}
			if(startPointY>endPointY)
			{
				yy1=endPointY;
				yy2=startPointY;
			}
			if(type.equals("line"))
			{
				//draw rectanges;
				g.drawLine(startPointX,startPointY,endPointX,endPointY);
			}
			else if(type.equals("rect"))
			{
				//draw lines;
				g.drawRect(xx1,yy1,xx2-xx1,yy2-yy1);
			}
			else if(type.equals("circle"))
			{
				//draw circles;
				g.drawOval(xx1,yy1,xx2-xx1,yy2-yy1);
			}
		}
		for(j=0;j<points.size()-1;j++)
		{
			if(((Point)points.get(j))==null||((Point)points.get(j+1))==null)
			{
				continue;
			}
			startPointX=((Point)points.get(j)).x;
			startPointY=((Point)points.get(j)).y;
			endPointX=((Point)points.get(j+1)).x;
			endPointY=((Point)points.get(j+1)).y;
			g.drawLine(startPointX,startPointY,endPointX,endPointY);
		}
	}

	private class ButtonAction 	implements ActionListener//按钮监视器
	{  	
		public ButtonAction(int i)
		{  
			_clickid = i;
		}
		public void actionPerformed(ActionEvent event)//按下按钮执行的动作
		{
			clickid=_clickid;
		}
		private int _clickid;
	}

	private class MouseHandler extends MouseAdapter//鼠标适配器
	{
		public void mousePressed(MouseEvent event)//单击鼠标执行的动作
		{
			//set something;
			Point point=new Point();
			point.x=event.getX();
			point.y=event.getY();
			String type="";
			if(clickid==4)
			{
				points.add(point);//保存点
			}
			else
			{
				if(clickid==1)
				{
					type="line";
				}
				else if(clickid==2)
				{
					type="rect";
				}
				else if(clickid==3)
				{
					type="circle";
				}
				x1=event.getX();
				y1=event.getY();
				startfaces.add(point);
				facetypes.add(type);//保存点之外的其它类型
			}
		
		}
		public void mouseReleased(MouseEvent event)//松开鼠标执行的动作
		{
			//set something;
			Point point=new Point();
			if(clickid==4)
			{
				point=null;
				points.add(point);
			}
			else
			{
				point.x=event.getX();
				point.y=event.getY();
				endfaces.add(point);
			}
			repaint();
		}
	}

	private class MouseMotionHandler implements MouseMotionListener//鼠标监视器
	{
		public void mouseMoved(MouseEvent event)//移动鼠标执行的动作
		{
			//set something;
			
		}
		public void mouseDragged(MouseEvent event)//拖动鼠标执行的动作
		{
			//set something;
			if(clickid==4)
			{
				Point point=new Point();
				point.x=event.getX();
				point.y=event.getY();
				points.add(point);
			}
			else
			{
			x2=event.getX();
			y2=event.getY();
			}
			repaint();
		}
	}
	private int clickid=0;//按钮id
	private int startPointX=0;//起点X
	private int startPointY=0;//起点Y
	private int endPointX=0;//终点X
	private int endPointY=0;//终点Y
	private ArrayList startfaces;//起点列表
	private ArrayList endfaces;//终点列表
	private ArrayList facetypes;//类型列表
	private ArrayList points;
	private int x1=0;
	private int y1=0;
	private int x2=0;
	private int y2=0;
}

⌨️ 快捷键说明

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