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

📄 mydraw.java

📁 一个简单的利用JAVA编写的画图画板程序,下载可马上使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    import java.lang.*;
	import java.awt.*;
	import java.applet.*;
	import javax.swing.*;  
	import java.awt.event.*;
	public class mydraw implements ItemListener
	{
	
    static int a=1,b=1,c=1;
    
    JFrame fr=null;    //定义框架
     
    JPanel pa1=null; //定义4个面板
	JPanel pa2=null;
	JPanel pa3=null; 
	JPanel pa4=null;
	
	JToggleButton tb1=null; //定义6个画图按钮
	JToggleButton tb2=null;
	JToggleButton tb3=null;
	JToggleButton tb4=null;
	JToggleButton tb5=null;
	JToggleButton tb6=null;
	
	
	JRadioButton rb1=null;  //定义5个颜色按钮
	JRadioButton rb2=null;
	JRadioButton rb3=null;
	JRadioButton rb4=null;
	JRadioButton rb5=null;
	
	JRadioButton rb6=null;  //定义2个填充按钮
	JRadioButton rb7=null;

   
   public	mydraw()  //构造函数
	{
	fr=new JFrame("画图");
	Container pp=fr.getContentPane(); //定义容器对象
	pp.setLayout(new FlowLayout());  //框架布局
	
	
	 
		
	 			
	   rb1=new JRadioButton("黑色",true);   // 定义颜色单选钮
	   rb2=new JRadioButton("红色"); 
	   rb3=new JRadioButton("橙色"); 
	   rb4=new JRadioButton("蓝色"); 
	   rb5=new JRadioButton("绿色");
	   rb6=new JRadioButton("不填充",true);
	   rb7=new JRadioButton("填充");
	   
	   
	   tb1=new JToggleButton("直线",true);     //定义图形按钮
	   tb2=new JToggleButton("矩形"); 
	   tb3=new JToggleButton("圆矩形"); 
	   tb4=new JToggleButton("椭圆"); 
	   tb5=new JToggleButton("圆"); 
	   tb6=new JToggleButton("圆弧");
	   
	   CanvasDraw can;
	   can=new CanvasDraw();      //定义画布can
	    
	   pa1=new JPanel();   //  创建面板1对象  并把画布加进去
	   pa1.add(can);
	   pa2=new JPanel();   //  创建面板2对象 并把颜色单选钮加进去
	   pa2.add(rb1);
	   pa2.add(rb2);
	   pa2.add(rb3);
	   pa2.add(rb4);
	   pa2.add(rb5);
	   pa3=new JPanel();
	   pa3.add(rb6);
	   pa3.add(rb7);
	  
	   
	   pa4=new JPanel();   //  创建面板3对象 并把图形按钮加进去 
	   pa4.add(tb1);
	   pa4.add(tb2);
	   pa4.add(tb3);
	   pa4.add(tb4);
	   pa4.add(tb5);
	   pa4.add(tb6);
	    
	   ButtonGroup bg1=new ButtonGroup();  //颜色单选钮放在同一组
	    bg1.add(rb1);
	    bg1.add(rb2);
	    bg1.add(rb3);
	    bg1.add(rb4);
	    bg1.add(rb5);				
	    
	  ButtonGroup bg2=new ButtonGroup();  //填充单选钮放在同一组
	   bg2.add(rb6);
	   bg2.add(rb7); 
	   ButtonGroup bg3=new ButtonGroup();  //图形按钮放在同一组
	   bg3.add(tb1);
	   bg3.add(tb2);
	   bg3.add(tb3);
	   bg3.add(tb4);
	   bg3.add(tb5);
	   bg3.add(tb6);
	   
	  
	   	 pp.add(pa1) ; 
	   	 pp.add(pa2) ; 
	   	 pp.add(pa3) ; 
	   	 pp.add(pa4) ; 			
	   	 	
	   fr.pack();//包装框架
	   fr.setBounds(0,0,850,700);   //设置框架大小
	   fr.setVisible(true);
	   
	   
	   
	 
	  
	   rb1.addItemListener(this);     //用ItemListener监听按钮事件
	   rb2.addItemListener(this); 
	   rb3.addItemListener(this); 
	   rb4.addItemListener(this); 
	   rb5.addItemListener(this); 
	   rb6.addItemListener(this); 
	   rb7.addItemListener(this); 
		
	   tb1.addItemListener(this); 
	   tb2.addItemListener(this); 
	   tb3.addItemListener(this); 
	   tb4.addItemListener(this); 
	   tb5.addItemListener(this); 
	   tb6.addItemListener(this); 
	   	 }
	   	public void itemStateChanged(ItemEvent e) //处理按钮事件实现ItemListener接口中的itemStateChanged(ItemEvent e)函数
	   {
		 if(e.getStateChange()==e.SELECTED)   //判断点击
		 {
			if(tb1.isSelected()==true)
				mydraw.a=1;                            
			else if(tb2.isSelected()==true)
					mydraw.a=2;                         
			else if(tb3.isSelected()==true)              
					mydraw.a=3;                            
			else if(tb4.isSelected()==true)             
					mydraw.a=4;                            
			else if(tb5.isSelected()==true)              
					mydraw.a=5;                            
			else if(tb6.isSelected()==true)
					mydraw.a=6;              
			
			
			if(e.getSource()==rb1)
				  	mydraw.b=1;
			if(e.getSource()==rb2)
				  	mydraw.b=2;
			if(e.getSource()==rb3)
				  	mydraw.b=3;
			if(e.getSource()==rb4)
				  	mydraw.b=4;
			if(e.getSource()==rb5)
				  	mydraw.b=5;
			
			if(e.getSource()==rb6)
				  	mydraw.c=1;
			if(e.getSource()==rb7)
					mydraw.c=2;    	
		 }
	   }
	   
	   class CanvasDraw extends Canvas implements KeyListener      //定义CanvasDraw类继承画图板Canvas
	   	{
	   		
	   	 /*int a[]=new int[100];  //定义3个数组,用于保存所选择的按钮,再在重画时用
	     int b[]=new int[100];
	     int c[]=new int[100];*/
	   		
	   	boolean mflag;//mflag表示鼠标是否进入画图板,进行绘制操作
	   	
	int linex[]=new int[1000];//纪录直线起始的X坐标
	int liney[]=new int[1000];//纪录直线起始的y坐标
	int linendx[]=new int[1000];//纪录直线结束的X坐标
	int linendy[]=new int[1000];//纪录直线结束的y坐标
	int indexL=0;//直线条数
	int lineC[]=new int[1000];  //直线的颜色
	int lineclass[]=new int[1000]; //图形类型
	int linefill[]=new int[1000];  //是否填充
	
	   
	  StringBuffer sb=new StringBuffer();  //定义字符串
	int currentX=0,currentY=0,startX=0,startY=0;//currentX,currentY表示当前鼠标坐标,startX,startY表示起始坐标
	
	
	CanvasDraw()   //CanvasDraw的构造函数  
	{
		setSize(600,300);  //设置大小      
		setBackground(Color.pink); //设置背景色      
		addMouseListener(new MouseAdpt(this));//添加鼠标事件
		addKeyListener(this);  //添加键盘事件
		addMouseMotionListener(new MouseMotionAdpt(this));//添加鼠标移动事件
	}
	void setStart(int x,int y)   //鼠标开始绘制
	{
		startX=x;  //纪录起始X坐标位置
		startY=y;  //纪录起始Y坐标位置
		linex[indexL]=x;  //存入数组
	    liney[indexL]=y;
	}
	void setCurrent(int x,int y)  //鼠标当前移动的位置
	{
		currentX=x;  //纪录当前X坐标位置
		currentY=y;  //纪录当前Y坐标位置
	}
	void setEnd(int x,int y)  //鼠标结束绘制时的位置
	{
		linendx[indexL]=x;
		linendy[indexL]=y;
	    lineC[indexL]=mydraw.b;      //定义3个数组,用于保存所选择的按钮,再在重画时用
        lineclass[indexL]=mydraw.a;
        linefill[indexL]=mydraw.c;
		indexL++;
             	       
	}
	void setMouseDragged(boolean k)  //判断鼠标是否处于拖动状态
	{
		mflag=k;
	}
	void showMeg(String s)  //显示用户消息
	{
	//mp.showStatus(s);
	}
		

	 	public void keyTyped(KeyEvent e)  //键盘打字事件
	{
	char ch=e.getKeyChar();  //获得键盘的字符
	sb.append(ch);  //添加入sb
	showMeg(""+sb.toString());
	repaint();
	}
	public void keyPressed(KeyEvent e){}  //键盘按下事件
	public void keyReleased(KeyEvent e){} //键盘释放事件
	
	 
	
	
	public void paint(Graphics g)//绘图操作
	{
	g.drawString("("+currentX+","+currentY+")"+sb,10,20);   //在坐标(10,20)处显示当前鼠标的坐标     	
		for(int i=0; i<indexL;i++)   //重绘
		{
		switch(lineC[i])
		{ 
		 case 1:
			 g.setColor(Color.black);
			 break;
		 case 2:
			g.setColor(Color.red);
			 break;
		 case 3:
			g.setColor(Color.orange);
			 break;
		 case 4:
			g.setColor(Color.blue);
			break;
		 case 5:
			g.setColor(Color.green);
			break;
		 default:
		 	break;
		} 
		 
	    if(linefill[i]==1)  
		{
			switch(lineclass[i])
			{
				case 1:
					g.drawLine(linex[i],liney[i],linendx[i],linendy[i]);
					break;
				case 2:
					g.drawRect(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(liney[i]-linendy[i]));
					break;
				case 3:
					g.drawRoundRect(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(liney[i]-linendy[i]),Math.abs(linex[i]-linendx[i])/5,Math.abs(liney[i]-linendy[i])/5);
					break;
				case 4:
					g.drawOval(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(liney[i]-linendy[i]));
					break;
				case 5:
					g.drawOval(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(linex[i]-linendx[i]));
					break;
				case 6:
					g.drawArc(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(liney[i]-linendy[i]),20,160);
				    break;
				default:
		 	        break;
			}
		}
		else if(linefill[i]==2)
		{
			switch(lineclass[i])
			{	
				case 1:
					g.drawLine(linex[i],liney[i],linendx[i],linendy[i]);
					break;
				case 2:
					g.fillRect(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(liney[i]-linendy[i]));
					break;
				case 3:
					g.fillRoundRect(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(liney[i]-linendy[i]),Math.abs(linex[i]-linendx[i])/5,Math.abs(liney[i]-linendy[i])/5);
					break;
				case 4:
				    g.fillOval(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(liney[i]-linendy[i]));
					break;
				case 5:
					g.fillOval(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(linex[i]-linendx[i]));
					break;
				case 6:
					g.fillArc(Math.min(linex[i],linendx[i]),Math.min(liney[i],linendy[i]),Math.abs(linex[i]-linendx[i]),Math.abs(liney[i]-linendy[i]),20,160);
					break;

⌨️ 快捷键说明

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