K
Krähe
Gast
Hallo zusammen,
ich habe ein Problem und zwar kommt bei mir in einer Klasse zwei MouseListener vor.
Bei dem ganzen handelt es sich um ein Programm, dass eine Voransicht von einer GUI bereitstellt.
Das Ganze funktioniert wie in Studio.NET - durch Drag&Drop.
hier noch die Dekleration der beiden Listener:
Bei dem ersten Listener erzeuge ich durch Drag&Drop ein neues Element (also Pressed Startpunkt und bei Released die Höhe und Breite). Danach poppt ein Fenster auf, wo ich Namen und Typ einstellen kann (das am Rande, ist aber unwichtig ). Jedenfalls funktioniert dies soweit. Ich kann also neue Elemente erstellen und diese werden nach ihrer Erstellung auch sofort gezeichnet.
Der zweite Listener berechnet, ob ich in ein Element hineinklicke - wenn ja, dann soll es verschoben werden (bei MouseDragged / MouseMoved) - dazu der Boolean isToMove, der eigentlich den ersten Listener blockieren soll.
Fakt ist, dass immer der erste Listener ausgelöst wird - egal, ob ich ihn ein vorhandenes Element klicke oder nicht.
Danke schon für die Mühe
Liebe Grüße,
Krähe.
ich habe ein Problem und zwar kommt bei mir in einer Klasse zwei MouseListener vor.
Bei dem ganzen handelt es sich um ein Programm, dass eine Voransicht von einer GUI bereitstellt.
Das Ganze funktioniert wie in Studio.NET - durch Drag&Drop.
Code:
private class DrawNewElement implements MouseListener, MouseMotionListener{
public void mousePressed(MouseEvent e){
point = e.getPoint();
}
public void mouseReleased(MouseEvent e){
if(!isToMove){
relpoint = e.getPoint();
height = point.y - relpoint.y;
width = point.x - relpoint.x;
if(height < 0){
height = height * (-1);
}
if(width < 0){
width = width * (-1);
}
openEditElementDialog();
repaint();
isDragged = false;
}
}
public void mouseDragged(MouseEvent e){
isDragged = true;
draggedPoint = e.getPoint();
repaint();
}
public void mouseMoved(MouseEvent e){
movedPoint = e.getPoint();
repaint();
}
public void mouseClicked(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
}
private class MotionListener implements MouseMotionListener,
MouseListener {
private int dx, dy;
public void mousePressed(MouseEvent e) {
Iterator<Elements> iter = model.getElements();
while(iter.hasNext()){
Elements elem = iter.next();
Rectangle rect = new Rectangle(elem.getPosition());
if (rect.contains(e.getX(), e.getY())) {
isToMove = true;
dx = e.getX() - rect.x;
dy = e.getY() - rect.y;
dragged = elem;
}
}
repaint();
}
public void mouseReleased(MouseEvent e) {
dragged = null;
repaint();
isToMove = false;
}
public void mouseDragged(MouseEvent e) {
if (dragged != null) {
Rectangle rect = new Rectangle(dragged.getPosition());
rect.x = e.getX() - dx;
rect.y = e.getY() - dy;
repaint();
}
}
public void mouseMoved(MouseEvent e) {
Iterator<Elements> iter = model.getElements();
while(iter.hasNext()){
Elements elem = iter.next();
Rectangle rect = new Rectangle(elem.getPosition());
if (rect.contains(e.getX(), e.getY())) {
hover = elem;
}
}
repaint();
}
public void mouseClicked(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
}
hier noch die Dekleration der beiden Listener:
Code:
MotionListener ml = new MotionListener();
addMouseMotionListener(ml);
addMouseListener(ml);
DrawNewElement dne = new DrawNewElement();
addMouseListener(dne);
addMouseMotionListener(dne);
Bei dem ersten Listener erzeuge ich durch Drag&Drop ein neues Element (also Pressed Startpunkt und bei Released die Höhe und Breite). Danach poppt ein Fenster auf, wo ich Namen und Typ einstellen kann (das am Rande, ist aber unwichtig ). Jedenfalls funktioniert dies soweit. Ich kann also neue Elemente erstellen und diese werden nach ihrer Erstellung auch sofort gezeichnet.
Der zweite Listener berechnet, ob ich in ein Element hineinklicke - wenn ja, dann soll es verschoben werden (bei MouseDragged / MouseMoved) - dazu der Boolean isToMove, der eigentlich den ersten Listener blockieren soll.
Fakt ist, dass immer der erste Listener ausgelöst wird - egal, ob ich ihn ein vorhandenes Element klicke oder nicht.
Danke schon für die Mühe
Liebe Grüße,
Krähe.