Java学习——画图(直线,圆,矩形)

监听器:

  1. 鼠标监听器 
  2. 鼠标事件参数
  3. 动作监听器  
  4. 动作事件参数

数字计算方法:

1.取绝对值(保证图形的长宽为正值)

public int abs(int a){
        if(a<0){
            return -a;
        }else{
            return a;
        }
    }

2.取最值(确保在图形起点与终点一致的情况下,画出来的图形形状也一致)

public int max(int a,int b,int c){
        if(a<b){
            if(b>c){
                return b;
            }else{
                return c;
            }


        }else{
            if(a>c){
                return a;
            }else{
                return c;
            }

        }
    }
package tky1028;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListener implements MouseListener, ActionListener {

    Graphics g;
    int x1,y1,x2,y2;
    String type="";

    @Override
    public void actionPerformed(ActionEvent e) {
        String ac=e.getActionCommand();
        System.out.println(ac);
        type=ac;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("点击");
        int x= e.getX();
        int y=e.getY();
        System.out.println("x="+x+" y="+y);
    }

    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("按下");
        int x= e.getX();
        int y=e.getY();
        System.out.println("x="+x+" y="+y);
        x1=x;
        y1=y;
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("松开");
        int x= e.getX();
        int y=e.getY();
        System.out.println("x="+x+" y="+y);
        x2=x;
        y2=y;
        if(type.equals("直线")){
            g.drawLine(x1,y1,x2,y2);
        }
        if(type.equals("矩形")){
            g.drawRect(min(x1,x2),min(y1,y2),abs(x2-x1),abs(y2-y1));
        }
        if(type.equals("圆形")){
            g.drawOval(min(x1,x2),min(y1,y2),abs(x2-x1),abs(y2-y1));
        }



    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }
    //数学计算方法
    public int abs(int a){
        if(a<0){
            return -a;
        }else{
            return a;
        }
    }
    public int min(int a,int b){
        if(a<b){
            return a;
        }else{
            return b;
        }
    }
    public int max(int a,int b,int c){
        if(a<b){
            if(b>c){
                return b;
            }else{
                return c;
            }


        }else{
            if(a>c){
                return a;
            }else{
                return c;
            }

        }
    }
}
package tky1028;


import javax.swing.*;
import java.awt.*;

public class Drawpad {
    public void showUI(){
        JFrame jf=new JFrame();
        jf.setTitle("画图板");
        jf.setSize(700,800);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        FlowLayout fl=new FlowLayout();
        jf.setLayout(fl);
        JButton jButton=new JButton("直线");
        jf.add(jButton);
        JButton jButton1=new JButton("矩形");
        jf.add(jButton1);
        JButton jButton2=new JButton("圆形");
        jf.add(jButton2);
        jf.setVisible(true);

        DrawListener drawListener=new DrawListener();
        jf.addMouseListener(drawListener);
        jButton.addActionListener(drawListener);
        jButton1.addActionListener(drawListener);
        jButton2.addActionListener(drawListener);

        Graphics g=jf.getGraphics();
        drawListener.g=g;

    }

    public static void main(String[] args) {
        Drawpad drawpad=new Drawpad();
        drawpad.showUI();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值