• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Java
  • 标签: java  gui  swing  awt  Graphics2D  

资源简介

java GUI awt 实现鼠标绘制矩形,鼠标拖动矩形,鼠标改变矩形大小功能. 其它图形的绘制方法参考: https://blog.csdn.net/xietansheng/article/details/55669157

资源截图

代码片段和文件信息

package com.test;

import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;
import java.util.ArrayList;

import javax.swing.JComponent;
import javax.swing.Jframe;
import javax.swing.JPanel;

public class MouseComponent extends JComponent implements MouseMotionListener {
    private Rectangle rect;
    private boolean isTopLeft;
    private boolean isTop;
    private boolean isTopRight;
    private boolean isRight;
    private boolean isBottomRight;
    private boolean isBottom;
    private boolean isBottomLeft;
    private boolean isDrag;
    private boolean isLeft;
    //矩形最小宽和高为多少
    private final static int RESIZE_WIDTH = 5;
    private final static int MIN_WIDTH = 20;
    private final static int MIN_HEIGHT = 20;
    
    
    private static final int SIDELENGTH = 50;//单击增加的矩形大小
    private ArrayList squares;//所有的矩形
    private Rectangle current;
    public MouseComponent() {
        this.squares = new ArrayList();
        this.rect = null;
        addMouseMotionListener(this);
        this.addMouseListener(new MouseHandle());// 监听鼠标点击事件
        //this.addMouseMotionListener(new MouseMotionHandler());// 监听鼠标移动事件
    }

    // 如果鼠标单击屏幕的地方有矩形则不绘制矩形
    public Rectangle find(Point2D p) {
        for (Rectangle r : squares) {
            if (r.contains(p))
                return r;
        }
        return null;
    }

    // 绘制矩形
    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        for (Rectangle r : squares) {
            g2.draw(r);
        }
    }

    // 添加矩形到屏幕
    public void add(Point2D p) {
        double x = p.getX();
        double y = p.getY();
        rect = new Rectangle((int) (x - SIDELENGTH / 2) (int) (y - SIDELENGTH / 2) SIDELENGTH SIDELENGTH);
        squares.add(rect);
        repaint();
    }

    // 删除矩形
    public void remove(Rectangle s) {
        if (s == null)
            return;
        if (s == rect)
            rect = null;
        squares.remove(s);
        repaint();
    }

    private class MouseHandle extends MouseAdapter {

        @Override
        public void mouseClicked(MouseEvent e) {
            rect = find(e.getPoint());
            // 当前位置如果有矩形,且点击大于2次,则删除矩形
            if (rect != null && e.getClickCount() >= 2)
                remove(rect);
        }

        @Override
        public void mousePressed(MouseEvent e) {
            rect = find(e.getPoint());
            // 当前位置没有矩形则绘制
            if (rect == null)
                add(e.getPoint());
        }

    }

    private class MouseMotionHandler implements MouseMotionListener {

        @Override
        public void mouseDragged(MouseEvent e) {
            // 如果当前位置有矩形,进行拖拽。
            if (rect

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        8452  2019-05-28 12:17  MouseComponent.java

评论

共有 条评论