Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java绘制矩形是单向的,而不是双向的_Java - Fatal编程技术网

java绘制矩形是单向的,而不是双向的

java绘制矩形是单向的,而不是双向的,java,Java,大家好,我有一些java代码可以画一个矩形,我曾经只向右拖动,即使我向左拖动,也会向右拖动,这是代码,我有什么帮助吗 public void mouseDragged(MouseEvent e) { Point p = e.getPoint(); int width = Math.max(selection.x - e.getX(), e.getX() - selection.x);

大家好,我有一些java代码可以画一个矩形,我曾经只向右拖动,即使我向左拖动,也会向右拖动,这是代码,我有什么帮助吗

  public void mouseDragged(MouseEvent e) {
                    Point p = e.getPoint();
                    int width = Math.max(selection.x - e.getX(), e.getX() - selection.x);
                    int height = Math.max(selection.y - e.getY(), e.getY() - selection.y);
                    selection.setSize(width, height);
                    repaint();

让我们做一些简单的代数

selection.x - e.getX()

- (e.getX() - selection.x)
所以你的表达是:

Math.max(- (e.getX() - selection.x), e.getX() - selection.x)

因为正数总是更大,所以它总是选择正数,因此你永远不会得到宽度/高度为负的矩形。

让我们做一些简单的代数

selection.x - e.getX()

- (e.getX() - selection.x)
所以你的表达是:

Math.max(- (e.getX() - selection.x), e.getX() - selection.x)

由于正面版本总是更大,它总是选择正面答案,因此你永远不会得到宽度/高度为负的矩形。

记住,
矩形
(和
图形#填充矩形
图形#绘制矩形
)不会渲染宽度/高度为负的矩形

你需要两件事

  • 当前鼠标点(或案例中的拖动点)
  • 第一次按下鼠标的点(定位点或原点)
  • 您应该从
    鼠标按下事件中获取锚点

    public void mousePressed(MouseEvent e) {
        clickPoint = new Point(e.getPoint());
    }
    
    然后,您需要确定哪一点最小,并将其作为起点,哪一点最大,并将其用于标注

    public void mouseDragged(MouseEvent e) {
        int minX = Math.min(e.getX(), clickPoint.x);
        int minY = Math.min(e.getY(), clickPoint.y);
        int maxX = Math.max(e.getX(), clickPoint.x);
        int maxY = Math.max(e.getY(), clickPoint.y);
    
        selection.x = minX;
        selection.y = minY;
        selection.width = maxX - minX;
        selection.height = maxY - minY;
        repaint();
    }
    


    请记住,
    Rectangle
    (和
    Graphics#fillRect
    Graphics#drawRect
    )不会渲染宽度/高度为负的矩形

    你需要两件事

  • 当前鼠标点(或案例中的拖动点)
  • 第一次按下鼠标的点(定位点或原点)
  • 您应该从
    鼠标按下事件中获取锚点

    public void mousePressed(MouseEvent e) {
        clickPoint = new Point(e.getPoint());
    }
    
    然后,您需要确定哪一点最小,并将其作为起点,哪一点最大,并将其用于标注

    public void mouseDragged(MouseEvent e) {
        int minX = Math.min(e.getX(), clickPoint.x);
        int minY = Math.min(e.getY(), clickPoint.y);
        int maxX = Math.max(e.getX(), clickPoint.x);
        int maxY = Math.max(e.getY(), clickPoint.y);
    
        selection.x = minX;
        selection.y = minY;
        selection.width = maxX - minX;
        selection.height = maxY - minY;
        repaint();
    }
    


    用代数!数学会给你答案用代数!数学会给你答案的谢谢,它目前在mousedrag活动中,我尝试过这个,但是我应该为int x和int y添加什么?非常感谢,一般来说,你不应该添加任何内容。你需要做的是确定maxX和minX,然后宽度变为maxX-minX,x点变为minX,然后,很明显,对于Y来说,同样的事情要绘制我选择的矩形。设置大小(宽度,高度);,好的,那么,看看我是如何计算位置和大小的,你需要用这些值替换选择的绘画…hm iv完成了你所说的,它现在在我单击时绘制一个矩形,但不会拖动,我会继续尝试使用你提供的信息,谢谢!谢谢,它目前在mousedrag事件中,我尝试过这个,但是我应该为int x和int y添加什么呢?非常感谢,一般来说,你不应该添加任何内容。你需要做的是确定maxX和minX,然后宽度变为maxX-minX,x点变为minX,然后,很明显,对于Y来说,同样的事情要绘制我选择的矩形。设置大小(宽度,高度);,好的,那么,看看我是如何计算位置和大小的,你需要用这些值替换选择的绘画…hm iv完成了你所说的,它现在在我单击时绘制一个矩形,但不会拖动,我会继续尝试使用你提供的信息,谢谢!