Java基本绘图功能

Java基本绘图


预期实现windows中 画图的基本功能,即点击不同按钮可在画板中使用 鼠标绘制不同 颜色与不同 形状的基本图形,如直线、多边形。

界面程序

1.建立窗体
2.添加按钮
3.按钮添加动作监听器
4.添加画布
5.窗体添加鼠标监听器

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

public class DrawUI {
	public void Init() {
		JFrame jf=new JFrame();
		jf.setSize(400,400);
		jf.setTitle("画图");
		jf.setLocationRelativeTo(null);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		FlowLayout fl=new FlowLayout();
		jf.setLayout(fl);
		JButton jb1=new JButton("直线");
		jf.add(jb1);
		JButton jb2=new JButton("矩形");
		jf.add(jb2);
		JButton jb3=new JButton("多边形");
		jf.add(jb3);
		JButton jb4=new JButton("红色");
		jf.add(jb4);
		JButton jb5=new JButton("绿色");
		jf.add(jb5);
		
		jf.setVisible(true);
		Graphics g=jf.getGraphics();
		
		DrawMouse mouse =new DrawMouse();
		jf.addMouseListener(mouse);
		jb1.addActionListener(mouse);
		jb2.addActionListener(mouse);
		jb3.addActionListener(mouse);
		jb4.addActionListener(mouse);
		jb5.addActionListener(mouse);
		mouse.gr=g;
	}
	public static void main(String[] args) {
		DrawUI dr =new DrawUI();
		dr.Init();
	}
}

监听器

需要用到动作监听器和鼠标监听器,所以新建一个类同时实现这两个接口
通过判断按钮的名称进行不同的操作
1.颜色
按下颜色按钮时,在动作监听器的方法中设置相应的颜色。
2.直线
按下鼠标时,在方法 mousePressed 中获取起点坐标,松开鼠标时,在方法mouseReleased 中获取终点坐标,同时绘制直线。
3.矩形
按下鼠标时,在方法 mousePressed 中获取对角线坐标,松开鼠标时,在方法mouseReleased 中获取对角线终点坐标,同时绘制水平与竖直的四条直线。
4.多边形
添加变量,点击次数count
在第一次松开鼠标之前,count=0,以直线的绘制方法绘制多边形第一条边。
在下一次松开鼠标时,获取当前鼠标位置,连接上一条边起点。
在方法mouseClicked中,判断双击,双击发生则连接第一个点与最后一个点。

package csl0318;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.Color;
import java.awt.event.MouseListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DrawMouse implements MouseListener,ActionListener {
	public Graphics gr;
	public String BottonName;
	public String ColorName;
	public int x1,y1,x2,y2,tempx,tempy,count;
    public void actionPerformed(ActionEvent e) {
    	BottonName=e.getActionCommand();
    	System.out.println(e.getActionCommand());
    	if(BottonName=="红色") {
    		gr.setColor(Color.RED);
    	}
    	if(BottonName=="绿色") {
    		gr.setColor(Color.GREEN);
    	}
    }
    public void mouseClicked(MouseEvent e){
    	System.out.println("点击");
    	if(e.getClickCount()==2&&count>0){
    		System.out.println("双击");
    		x2=e.getX();
    		y2=e.getY();
    		gr.drawLine(x1, y1, x2, y2);
    		count=0;
    	}
    }
    public void mousePressed(MouseEvent e) {
    	System.out.println("按下");
    	if(BottonName=="直线"||BottonName=="矩形") {
    		x1=e.getX();
    		y1=e.getY();
        	}
    	else if(BottonName=="多边形") {
    		if(count==0) {
    		x1=e.getX();
    		y1=e.getY();
    		count++;
    		}
    		else {
    			tempx=x2;
    			tempy=y2;
    			x2=e.getX();
        		y2=e.getY();
        		gr.drawLine(tempx,tempy,x2,y2);
        		count++;
    		}
        }
  
    }
    public void mouseReleased(MouseEvent e) {
    	System.out.println("松开");
    	x2=e.getX();
    	y2=e.getY();
    
    	if(BottonName=="直线") {
    	gr.drawLine(x1, y1, x2, y2);
    	}
    	if(BottonName=="矩形") {
    	gr.drawLine(x1, y1, x2, y1);
    	gr.drawLine(x1, y1, x1, y2);
    	gr.drawLine(x2, y1, x2, y2);
    	gr.drawLine(x1, y2, x2, y2);
    	}
    	if(BottonName=="多边形"&&count==1) {
    		x2=e.getX();
    		y2=e.getY();
    		gr.drawLine(x1, y1, x2, y2);
    	}
    }
    public void mouseEntered(MouseEvent e) {
    	System.out.println("进入");
    }
    public void mouseExited(MouseEvent e) {
    	System.out.println("退出");
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值