Java swing 在鼠标拖放中绘制矩形

标签 java swing drawrect

我正在创建一个矩形绘图程序。只有当程序拖到底部时才会绘制正方形。 即使向另一个方向拖动,我也想确保正确绘制正方形。 我该如何解决? 请帮助我。

**DrawRect.java**


    import javax.swing.*;

    import java.awt.*;

    import java.awt.event.*;

    public class DrawRect extends JPanel {

        int x, y, w, h;
        public static void main(String [] args) { 
            JFrame f = new JFrame("Draw Box Mouse 2");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
            f.setContentPane(new DrawRect());
            f.setSize(300, 300); f.setVisible(true);
        }



        DrawRect() { 
            x = y = w = h = 0; // 
            MyMouseListener listener = new MyMouseListener(); 
            addMouseListener(listener); 
            addMouseMotionListener(listener);    
        }

        public void setStartPoint(int x, int y) {
            this.x = x; this.y = y;
        }

        public void setEndPoint(int x, int y) { 
            w = Math.abs(this.x - x); 
            h = Math.abs(this.y - y); 
        }

        class MyMouseListener extends MouseAdapter {
            public void mousePressed(MouseEvent e) {
                setStartPoint(e.getX(), e.getY());
            } 
            public void mouseDragged(MouseEvent e) { 
                setEndPoint(e.getX(), e.getY()); repaint(); 
            } 
            public void mouseReleased(MouseEvent e) {
                setEndPoint(e.getX(), e.getY()); repaint(); 
            } 
        }

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.RED); 

Please help me.
            g.drawRect(x, y, w, h); 

        }



    }

最佳答案

尝试这样的事情。 你必须仔细确定起点。起点是第一个和最后一个鼠标坐标的最小 x 和 y 点。

下面是解决这个问题的步骤

  1. 鼠标点击x,y时取第一个坐标
  2. 鼠标拖动x2,y2取最后坐标
  3. 将最小 x 和 y 坐标作为 drawRect Math.min(x,x2);
  4. 的起点
  5. 用坐标差的绝对值计算矩形的高和宽。 Math.abs(x-x2);

代码

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

    public class DrawRect extends JPanel {

        int x, y, x2, y2;

        public static void main(String[] args) {
            JFrame f = new JFrame("Draw Box Mouse 2");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setContentPane(new DrawRect());
            f.setSize(300, 300);
            f.setVisible(true);
        }

        DrawRect() {
            x = y = x2 = y2 = 0; // 
            MyMouseListener listener = new MyMouseListener();
            addMouseListener(listener);
            addMouseMotionListener(listener);
        }

        public void setStartPoint(int x, int y) {
            this.x = x;
            this.y = y;
        }

        public void setEndPoint(int x, int y) {
            x2 = (x);
            y2 = (y);
        }

        public void drawPerfectRect(Graphics g, int x, int y, int x2, int y2) {
            int px = Math.min(x,x2);
            int py = Math.min(y,y2);
            int pw=Math.abs(x-x2);
            int ph=Math.abs(y-y2);
            g.drawRect(px, py, pw, ph);
        }

        class MyMouseListener extends MouseAdapter {

            public void mousePressed(MouseEvent e) {
                setStartPoint(e.getX(), e.getY());
            }

            public void mouseDragged(MouseEvent e) {
                setEndPoint(e.getX(), e.getY());
                repaint();
            }

            public void mouseReleased(MouseEvent e) {
                setEndPoint(e.getX(), e.getY());
                repaint();
            }
        }

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.RED);
            drawPerfectRect(g, x, y, x2, y2);
        }

    }

关于Java swing 在鼠标拖放中绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40945461/

相关文章:

java - spring 错误 :org. springframework.web.context.ContextLoader - 上下文初始化失败

java - setHorizo​​ntalAlignment(CENTER) - CENTER 无法解析为变量

ios - 调用 setNeedsDisplay 时出现快速奇怪的行为

ios - 如何创建带有红色角的 UILabel?

java - 这个加密函数是可逆的吗?

java - 在不同的数组中过滤一个 Arraylist

java - 使用 JFrame 的焦点(丢失)来停止录制截屏?

Java Swing JTree : how to change the focus on the last created node

ios - 未在 AsyncImageView 的子类中调用 drawRect

java - 为字符链接列表编写一个compareTo()方法