[Help] Java Button verschieben

06/15/2014 18:21 |Epic|FaiL|#1
Hey Leute,

ich wollte mal Anfangen so ein kleines Spiel zu programmieren, und stoze direkt auf eine Hürde :D.
Ich will das ich ein Button verschieben kann mit der Maus wenn ich sie gedrückt halte. D.h das wenn ich die linke Maus Taste drücke der Button an der Stelle der Maus ist, und sich auch mit verschiebt wenn ich die maus Bewege.
Mein Quelltext aus Eclipse sieht grade so aus :
Quote:
public class Spiel extends JFrame implements MouseMotionListener
{
JButton knopp;
private int startX,startY;
public Spiel()

{
super("DasSpiel");
this.setLayout(null);
knopp = new JButton ("Knopf");
knopp.setBounds(0,0,100,100);
knopp.addMouseMotionListener(this);
this.add(knopp);
this.setBounds(0,0,1000,1000);
this.setVisible(true);
}
public static void main(String[] args)
{
Spiel test = new Spiel();
}
public void mouseDragged(MouseEvent e) {
startX = e.getX();
startY = e.getY();
knopp.setBounds(startX, startY, 100, 100);
}

public void mouseMoved(MouseEvent e) {

}
}
Wenn ich die Maustaste Drücke und sie bewege geht der Button zwar mit, aber nicht an der Stelle der Maus und der Button geht immer wieder nach oben Links.
Kann einer helfen ?
06/15/2014 19:04 xXKonaXx#2
Du musst dem JFrame den Listener zuteilen und nicht dem Button.
Dann kannst du dem Button einfach einen MouseListener geben und gucken ob der User den Button draggen möchte, dazu kannst du z.B einfach wenn gedrückt einen boolean auf true setzen.
06/15/2014 19:13 |Epic|FaiL|#3
Meinst du
Quote:
JFrame.addMouseMotionListener(this);
? Weil das geht nicht :D. Und warum bewegt sich der Button nur wenn ich auf ihn klicke und dann die Mausbewege ?
06/15/2014 19:20 xXKonaXx#4
Das Drag Event tritt nur ein, wenn du die Maus gedrückt hältst und sie bewegst.
Eine andere Möglichkeit wäre diese:

Du kontrollierst ob die Maus noch im Button drinne is, ansonsten setzt du die Position nicht neu. Dann braucht der Button aber wieder den Listener. :)
06/15/2014 19:40 |Epic|FaiL|#5
Ja ich drücke ihn ja :D - aber es geht nur wenn ich auf den Knopf drücke, geht es irgendwie auch das wenn ich einfach nur im JFrame linksklick klicke das der Button dort hingeht ? Soweit habe kann ich ihn verschieben ohne das er wieder nach oben links geht, aber er "verdoppelt" sich noch.
06/15/2014 19:48 xXKonaXx#6
Wenn du den Button mit einem Klick platzieren willst, musst du doch einfach nur dem Frame einen MouseListener geben und in der mouseClicked oder mousePressed Methode den Button auf die Mausposition setzen. Wo is denn dein Problem? Die Drag Variante die ich gepostet habe, funktioniert bei mir einwandfrei.
06/15/2014 19:58 |Epic|FaiL|#7
Okey ich habs danke dir :).