【问题标题】:How to move a rectangle in Java?如何在Java中移动一个矩形?
【发布时间】:2012-01-02 11:57:00
【问题描述】:

我正在尝试移动一个矩形,但我不知道该怎么做,我知道它与“mouseClicked(MouseEvent e)”有关,但不知道如何使用它。这是我到目前为止的代码:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class MovRect extends Applet implements MouseMotionListener, MouseListener {
Color color = Color.green;
int x=30,y=30,w=150,l=150;
String MouseMotion ="";

public void init()
{
    addMouseListener(this);
    addMouseMotionListener(this);
}
public void paint(Graphics g)
{
    super.paint(g);

    g.setColor(color);
    g.drawRect(x, y, w, l);

}
public void mouseClicked(MouseEvent e)
{
    String clickDesc;
    if (e.getClickCount() == 2)
        clickDesc = "double";
    else
        clickDesc = "single";

    System.out.println("Mouse was " + clickDesc + "-clicked at location (" +
        e.getX() + ", " + e.getY() + ")");

        int mouseX = e.getX();
        int mouseY = e.getY();

    if( mouseX >= x && mouseX <= x+w && mouseY >= y && mouseY <= y+l )
    {

    }
    else
    {

    }
        this.repaint();
}

public void mouseDragged(MouseEvent e)
{
    System.out.println("mouse is being dragged at location (" + e.getX() + ", " +      e.getY() + ")");
    MouseMotion ="mouseDragged";
    repaint();
}
public void mouseMoved(MouseEvent e)
{
    System.out.println("mouse is being moved at location (" + e.getX() + ", " + e.getY() + ")");
    MouseMotion ="mouseMoved";
    repaint();
}


public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
 }

【问题讨论】:

  • 您希望矩形何时移动,您希望将它移动到哪里?不知道你为什么是螺柱,你已经创建了一个程序,它用指定的 x 和 y 绘制一个矩形。您还可以监听鼠标移动和鼠标点击,并在鼠标移动或点击时记录鼠标的 x 和 y 位置。如果您更改框的 x 或 y,该程序甚至准备重新绘制。你不是自己写过这个程序吗?哪一部分你不明白?

标签: java applet awt


【解决方案1】:

新答案 如果您希望能够单击并拖动矩形,您只需更新矩形的 x 和 y 并让鼠标侦听器将这些值更改为鼠标单击时的当前位置。

旧答案

您的问题有点令人困惑。你提到使用 mouseClicked(MouseEvent e) 但这无关 实际上移动处理鼠标事件的矩形 被点击。

如果你只是想移动你的矩形,你可以有一个变量和 添加到 x 或 y。例如:

int x = 100;
int y = 100;    
g.fillRect(x,y,100,100);

那么在你的公开 void 运行中你可以这样做:

      try
      {
        Thread.sleep(100);
      }catch(Exception e)
      {
      }
      x = x + 2;
      y = y +2;
      repaint();

或者如果鼠标基本上被点击了,你就会使用鼠标 事件,当它被点击时,您只需将 x 和 y 设置为 鼠标的位置。

【讨论】:

  • 他希望能够拖动鼠标并让正方形随之移动,你从哪里得到三角形...
  • 哎呀,由于某种原因,我输入了三角形,我的意思是矩形。我将编辑我的消息。
  • 没问题!基本上,您只想使用鼠标侦听器,并且无论何时单击它,您都希望它继续移动到鼠标的位置。再次单击时让它停止这样做。或者我想当你释放点击它也会起作用。
【解决方案2】:

您需要将鼠标侦听器添加到您要侦听的对象。查看http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html,它将让您开始了解如何设置鼠标侦听器。
另外,您实际上被困在哪里?让听众工作?还是让矩形移动?

【讨论】:

【解决方案3】:

如果您希望能够“绘制”矩形,则此片段效果很好。

public int XVal = 0 , YVal = 0;

public void paint(Graphics g) {

    g.fillRect(XVal, YVal, 20, 20);

    addMouseMotionListener(
            new MouseMotionAdapter() {

                public void mouseDragged(MouseEvent e) {

                    XVal = e.getX();
                    YVal = e.getY();
                    repaint();
                }
            });
} 

【讨论】:

    【解决方案4】:

    为了让它按顺序移动,你需要得到相对位置,它总是 当前位置 - 最后位置。您可以使用 mouseMove 存储当前位置。

    public void mouseMoved(MouseEvent e)
    {
      _relativePosition.x = e.getX() - _currentPosition.x;
      _relativePosition.y = e.getX() - _currentPosition.y;
      _currentPosition.x = e.getX();
      _currentPosition.y = e.getY();
    }
    

    【讨论】:

      【解决方案5】:

      你只需要在tick method()中增加x或y变量;

      【讨论】:

        猜你喜欢
        • 2021-02-06
        • 2018-12-06
        • 2013-02-19
        • 1970-01-01
        • 2021-03-21
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多