简单画图板的基本实现

1.功能分析

我们需要做到的画图板是当用户点击鼠标两下,或者拖动,就能画出一些简单的直线,矩形,椭圆等等。
要达到这个要求,在java有一个添加鼠标监听器的方法。所以我们首先要显示一个JFrame界面,给JFrame界面添加已经实现的鼠标监听器。JFrame提供了一个geiGraphics()方法可以得到java.awt.Graphics对象,Graphics可以理解为“画布”对象,通过调用Graphics对象的不同的draw方法并传入鼠标的坐标参数。(此时的界面就像一个直角坐标,原点在左上角,通过记录鼠标点击事件的次数和每次点击时,鼠标所在的坐标,再用draw方法就可以画出想要的图形了)。

添加
创建一个JFrame界面
已经实现的鼠标监听器
画图要用到Graphics对象
处理按钮操作事件用到ActionListener

2初步实现

1.出现画图界面

首先我们要像前面一样显示一个界面,这里不做赘述。(不需要添加其他组件的界面,可以添加按钮代表不同的形状和颜色)这里简单的添加一些如“直线”,“矩形”,“椭圆”和“红色”“黑色”“蓝色”这几个按钮。代码如下:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class DrawFrame extends JFrame {
	public static void main(String []args){
		DrawFrame df = new DrawFrame();
		df.Frame();
	}
	
   public void Frame(){
	   this.setTitle("画板");
	   this.setSize(700,800);
	   this.setLocationRelativeTo(null);
	   this.setDefaultCloseOperation(3);	  
	   this.getContentPane().setBackground(Color.white);
	   FlowLayout layout = new FlowLayout(FlowLayout.CENTER, 40, 10);
	   this.setLayout(layout);
	   String btname [] = {"直线","矩形","椭圆"};
	   for(int i=0;i<btname.length;++i){
		   JButton jbu = new JButton(btname[i]);
		   jbu.setPreferredSize(new Dimension(60,30));
		   this.add(jbu);
	   }
	   String colorname[] = {"红色","黑色","蓝色"};
	   Color [] color = {Color.red,Color.black,Color.blue};
	   for(int j=0;j<colorname.length;++j){
		   JButton jbu = new JButton();
		   jbu.setBackground(color[j]);
		   jbu.setPreferredSize(new Dimension(60,30));
		   this.add(jbu);	   
	   }
	   this.setVisible(true);
   }
}

这里我换了一种方式创建了一个画图板界面,继承JFrame类,然后在进行设置。
此时运行起来是这样的:
在这里插入图片描述

2.给界面添加鼠标监听器

然后我们就需要给界面添加监听器,用来获取鼠标按下和释放时候的坐标。在java鼠标监听器中,鼠标有五种事件可被监听,分别为:按下,释放,点击,进入(界面),退出(界面)。
进入是指你的光标进入了界面
退出当然就是退出了那个界面之外
按下是你鼠标光标在界面里并执行按下操作
释放是你按下后释放
点击则是你执行按下并释放这两个操作

在继承mouselistener这个借口之后就会有五种方法,如下面代码:

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class FrameListener implements MouseListener {

	public void mouseClicked(MouseEvent e) {	
	}
		
	public void mousePressed(MouseEvent e) {		
	}

	public void mouseReleased(MouseEvent e) {	
	}

	public void mouseEntered(MouseEvent e) {	
	}

	public void mouseExited(MouseEvent e) {	
	}
}

上面我们已经弄出了画图板界面,现在我们就要把这个鼠标监听器添加给画图板界面,这样当我们用鼠标在界面上操作时就会触发监听器里面的方法。

但如果我们要画图还要用到另一个类,Graphics,画笔,我们在那个组件上面画图从窗体,就要在那个组件获取画笔对象。这里我们当然是在窗体上获取画笔对象,但是一定要在窗体显示可见之后
在这里插入图片描述
在这里插入图片描述
如此之后运行整个程序,我们便能在窗体上画出直线了。
在这里插入图片描述
同理我们可以实现画矩形,画椭圆的目标。

3.给按钮添加监听器

上面我们已经能在出现的界面中画直线,椭圆等了,但细心的或发现,我在界面上创立了诸如 “直线”,“椭圆”和一些颜色的按钮,能否实现点击相应的按钮就能用鼠标画出相应的图形并配上颜色的,那么这就是我们 的第三步了。这里我们需要用到一个ActionListener接口。看下面代码:
下面给出两个类的代码:
DrawFrame类

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;

public class DrawFrame extends JFrame {
	public static void main(String []args){
		DrawFrame df = new DrawFrame();
		df.Frame();
	}
	
   public void Frame(){
	   this.setTitle("画板");
	   this.setSize(700,800);
	   this.setLocationRelativeTo(null);
	   this.setDefaultCloseOperation(3);	  
	   this.getContentPane().setBackground(Color.white);
	   FlowLayout layout = new FlowLayout(FlowLayout.CENTER, 40, 10);
	   this.setLayout(layout);
	   
	   FrameListener fl = new FrameListener();//创建监听器对象
	   String btname [] = {"直线","矩形","椭圆"};
	   for(int i=0;i<btname.length;++i){
		   JButton jbu = new JButton(btname[i]);
		   jbu.setPreferredSize(new Dimension(60,30));
		   jbu.addActionListener(fl);
		   this.add(jbu);
	   }
	   String colorname[] = {"红色","黑色","蓝色"};
	   Color [] color = {Color.red,Color.black,Color.blue};
	   for(int j=0;j<colorname.length;++j){
		   JButton jbu = new JButton();
		   jbu.setBackground(color[j]);
		   jbu.setPreferredSize(new Dimension(60,30));
		   jbu.addActionListener(fl);
		   this.add(jbu);	   
	   }
	   this.setVisible(true);
	   
	   
	 //画笔:图形画在那个组件上,画笔就从改组件上获取
	 //从窗体上获取画笔对象,一定要在窗体显示可见之后
	   Graphics g = this.getGraphics();
	   this.addMouseListener(fl);//给窗体添加监听器方法
	   fl.setGr(g);//将画笔对象传到监听器
   }
	
}
   

FrameListener类

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;

public class FrameListener implements MouseListener, ActionListener {
    private  Graphics g;
    private Color color;//定义颜色属性
    private String name;//接受按钮上的文字
    private int x1,y1,x2,y2;
    public void setGr(Graphics g){
    	this.g = g;
    }
    
   // 操作添加ActionListener的对象时调用此方法
	public void actionPerformed(ActionEvent e) {
    	//操作按钮时获取按钮信息,并对是文字还是颜色进行分类
    	if(e.getActionCommand().equals("")){
    		         JButton jbuc=(JButton)e.getSource();
 //可以获得JButton的所有信息,e.getSource();可以获取所有组件信息string name2=e.getText。
    				   color = jbuc.getBackground();
    			}
    			else{
    				name = e.getActionCommand();//如果按钮上有文字,获取文字,用name变量保存
    			}	
	}
    
    public void mouseClicked(MouseEvent e) {
		
	}

	
	public void mousePressed(MouseEvent e) {
	  x1=e.getX();
	  y1=e.getY();//获取按压时的点坐标	
	  g.setColor(color);//可以通过对按钮执行按压操作改变画笔的颜色
	}


	public void mouseReleased(MouseEvent e) {
	  x2=e.getX();
	  y2=e.getY();//获取释放时候点的坐标
		if("直线".equals(name))    
			g.drawLine(x1, y1, x2, y2);//画直线
		if("矩形".equals(name))   
			g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2));
		if("椭圆".equals(name))  
			g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2));
	}

	public void mouseEntered(MouseEvent e) {
		
	}


	public void mouseExited(MouseEvent e) {
		
	}
}

程序运行结果:在这里插入图片描述
这样我们就实现了一个简单的画图板,聪明的你还可以添加更多的颜色,加上更多的图案。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值