Java I';我不能让这个程序向左和向右画图形;向上的它只会向右和向下移动

Java I';我不能让这个程序向左和向右画图形;向上的它只会向右和向下移动,java,Java,我在向左和向上绘制矩形时遇到问题。它们从右到下都画得很完美。 如能给予答复,将不胜感激 import acm.program.*; import acm.graphics.*; import java.awt.event.*; public class Ch10_Ex04_Mouse_Dragged_Rectangle extends GraphicsProgram { public void init() { addMouseListeners(); }

我在向左和向上绘制矩形时遇到问题。它们从右到下都画得很完美。 如能给予答复,将不胜感激

import acm.program.*;
import acm.graphics.*;
import java.awt.event.*;

public class Ch10_Ex04_Mouse_Dragged_Rectangle extends GraphicsProgram
{

    public void init()
    {
    addMouseListeners();
    }

    public void mousePressed (MouseEvent e)
    {
      X = e.getX();
      Y = e.getY();
      rect = new GRect (e.getX(), e.getY(), 0, 0);
      add (rect);
    }

    public void mouseDragged (MouseEvent e) 
    {
    //  if (e.getX() < X)
    //  rect.setBounds(X, Y, -e.getX() + X, e.getY() - Y);
        rect.setBounds(X, Y, e.getX()-X, e.getY()-Y);
    }

    int X, Y;
    private GRect rect;

}
导入acm.program.*;
导入acm图形。*;
导入java.awt.event.*;
公共类Ch10\u Ex04\u鼠标\u拖动\u矩形扩展图形程序
{
公共void init()
{
addMouseListeners();
}
公共无效鼠标按下(MouseEvent e)
{
X=e.getX();
Y=e.getY();
rect=newgrect(e.getX(),e.getY(),0,0);
添加(rect);
}
公共无效鼠标标记(鼠标事件e)
{
//if(如getX()
我在这里做了一些假设,但我认为这是您正在寻找的mouseDragged函数(我没有验证语法错误)。这将在所有四个可能的拖动方向(1)右/下,(2)右/上,(3)左/下,(4)左/上)绘制矩形:

public void mouseDragged(MouseEvent e)
{
//确定x值和长度
int xPos=X;
intxlen=Math.abs(X-e.getX());
if(如getX()
这不是一个程序。这只是一节课。也就是说,您需要查找rect.setBounds的文档。我很确定,给它负宽度和/或高度实际上是不允许的,但你必须查一下,告诉我是不是这样,因为如果你不知道,你还没有查过文档,您可能应该推迟询问堆栈溢出问题,直到您确定正确调用了所有函数=)我猜这也不适用于(1)向左和向下拖动(2)向右和向上拖动。发布了一个考虑了所有4个拖动方向的答案。太好了,很高兴它对你有用。诀窍是确定最左边的X值和最上面的Y值。之后,只需插入长度。这段代码可以简化,但为了可读性,还是这样写的。
public void mouseDragged (MouseEvent e) 
{
    // Determine x-val and length
    int xPos = X;
    int xLen = Math.abs(X - e.getX());
    if (e.getX() < X) {
        xPos = e.getX();
    }

    // Determine y-val and length
    int yPos = Y;
    int yLen = Math.abs(Y - e.getY());
    if (e.getY() < Y) {
        yPos = e.getY();
    }

    // Set bounds on rectangle
    rect.setBounds(xPos, yPos, xLen, yLen);
}