画板 按钮与功能选择

基础步骤:

1.创建一个窗体

2: 给窗体添加鼠标监听器

3: 从窗体上获取一个Graphics 传入监听器中

4: 获取鼠标操作时的坐标

5: 在鼠标释放时绘制直线

如下:

package com.ldy0713;

import javax.swing.*;
import java.awt.*;
public class DrawPad {
    //监听实现  在DrawPad中创建一个DrawListener对象
    DrawListener dl=new DrawListener();
    public void initUI(){
        //界面开发
        //创建JFrame对象  设置标题  设置尺寸  设置关闭方式  设置可视化
        JFrame jf=new JFrame();
        jf.setTitle("画板2.0");
        jf.setSize(500,600);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        //可视化后用窗体对象调用addMouseListener方法  导入DrawListener对象
        jf.addMouseListener(dl);
        //创建画笔类                 
        Graphics g= jf.getGraphics();
        dl.g2=g;
        System.out.println(g);
    }
        //创建一个程序入口,在程序入口创建DrawPad对象,调用initUI方法
        public static void main(String[] args) {
            DrawPad dp=new DrawPad();
            dp.initUI();
        }
}
package com.ldy0713;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//创建一个DrawListener类  DrawListener后实现MouseListener接口
public class DrawListener implements MouseListener {
    Graphics g2;
    int x1,y1,x2,y2;
    //重写MouseListener中的五个方法,在每个方法中写一个输出语句用于测试
    public void mousePressed(MouseEvent e){
        x1=e.getX();
        y1=e.getY();
        System.out.println("鼠标按下"+x1+","+y1);
    }
    public void mouseReleased(MouseEvent e) {
        System.out.println("鼠标松开"+x2+","+y2);
        x2=e.getX();
        y2=e.getY();
        //画矩形(坐标连线法 可包含坐标运算)
        g2.drawLine(x1,y1,x2,y2);  
    }
    public void mouseEntered(MouseEvent e){
        System.out.println("鼠标进入");
    }
    public void mouseExited(MouseEvent e){
        System.out.println("鼠标移出");
    }
    public void mouseClicked(MouseEvent e){
        System.out.println("鼠标点击");
    }
}

给窗体上添加按钮 用于选择图形:

1: 给窗体添加按钮 先设置窗体的布局

//......

public class DrawPad {
    public void initUI(){
        JFrame jf=new JFrame();
        jf.setTitle("画板");
        jf.setSize(800,600);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        //布局&设置
        FlowLayout fl=new FlowLayout();
        jf.setLayout(fl);
        //按钮&添加
        JButton lineBtn=new JButton("直线");
        JButton rectBtn=new JButton("矩形");
        JButton ovalBtn=new JButton("圆");
        JButton triaBtn=new JButton("等腰三角形");
        jf.add(lineBtn);
        jf.add(rectBtn);
        jf.add(ovalBtn);
        jf.add(triaBtn);
        jf.setVisible(true);

//......

2: 给按钮添加监听器 ,监听器类也要实现ActionListener接口

DrawListener中 :


//......

//添加按钮监听
        lineBtn.addActionListener(dl);
        rectBtn.addActionListener(dl);
        ovalBtn.addActionListener(dl);
        triaBtn.addActionListener(dl);
    }
    public static void main(String[] args) {
        DrawPad dp=new DrawPad();
        dp.initUI();
    }
}

 在DrawPad中:

//......

public class DrawListener implements MouseListener, ActionListener {
    Graphics g2;
    int x1,y1,x2,y2;

//.......

//监听按钮
    public void actionPerformed(ActionEvent e) {
    //获取按钮文本
        String btnText=e.getActionCommand();
        System.out.println("点击"+btnText);
    }
}

//......

3: 利用点击按钮时获取的文本在鼠标松开时 判断绘制什么图形


//......

public void mouseReleased(MouseEvent e) {
        System.out.println("鼠标松开" + x2 + "," + y2);
        x2 = e.getX();
        y2 = e.getY();
        if (type.equals("直线")) {
            g2.drawLine(x1, y1, x2, y2);
        } else if (type.equals("矩形")) {
            g2.drawLine(x1, y1, x2, y1);
            g2.drawLine(x1, y1, x1, y2);
            g2.drawLine(x2, y2, x1, y2);
            g2.drawLine(x2, y2, x2, y1);
        } else if (type.equals("圆")) {
            g2.drawOval(x1,y1,Math.abs(x2-x1),Math.abs(y2-y1));
        } else if (type.equals("等腰三角形")) {
            int x=(x1+x2)/2;
            int y=y1;
            g2.drawLine(x,y,x1,y2);
            g2.drawLine(x,y,x2,y2);
            g2.drawLine(x1,y2,x2,y2);
        }
    }
    public void mouseEntered(MouseEvent e) {
        System.out.println("鼠标进入");
    }
    public void mouseExited(MouseEvent e) {
        System.out.println("鼠标移出");
    }
    public void mouseClicked(MouseEvent e) {
        System.out.println("鼠标点击");
    }
    String type="直线";
    //监听按钮
    public void actionPerformed(ActionEvent e) {
    //获取按钮文本
        String btnText=e.getActionCommand();
        System.out.println("点击"+btnText);
    //点击按钮的文本 赋值给type
        type=btnText;

    }

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值