Как переместить прямоугольник в Java? - PullRequest
2 голосов
/ 20 ноября 2011

Я пытаюсь переместить прямоугольник, но я не знаю, как это сделать, я знаю, что это связано с '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) {}
 }

Ответы [ 5 ]

5 голосов
/ 21 ноября 2011

Новый ответ Если вы хотите иметь возможность щелкать и перетаскивать прямоугольник, вы просто обновляете x и y прямоугольника, и слушатель мыши меняет эти значения на текущую позицию мыши при нажатии.

Старый ответ

Ваш вопрос немного сбивает с толку. Вы упоминаете использование mouseClicked(MouseEvent e) но это не имеет ничего общего с фактически перемещая прямоугольник, который имеет дело с событием, где мышь нажата.

Если вы просто хотите переместить прямоугольник, вы можете иметь переменную и добавить к х или у. Например:

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

Тогда в вашем публичном забеге вы можете сделать:

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

Или если бы щелкнуть мышью в основном, вы бы использовали мышь событие и когда он нажал, вы бы просто установить, что х и у в положение мыши.

1 голос
/ 17 октября 2013

вам просто нужно увеличить переменную x или y в методе tick ();

1 голос
/ 23 марта 2013

Чтобы он двигался последовательно, вам нужно получить относительную позицию, которая всегда currentPosition - LastPosition. Вы можете сохранить текущую позицию, используя 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();
}
1 голос
/ 27 декабря 2012

Если вы хотите «рисовать» прямоугольники, этот фрагмент прекрасно работает.

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();
                }
            });
} 
1 голос
/ 20 ноября 2011

Вам необходимо добавить прослушиватель мыши к объекту, который вы хотите прослушать.Проверьте http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html, это поможет вам начать настройку прослушивателя мыши.
Кроме того, где вы на самом деле застряли?Заставить слушателя работать?Или заставить прямоугольник двигаться?

...