Probleme mit der maus

Status
Nicht offen für weitere Antworten.

Black_Divil

Mitglied
Hallo ich habe eine Brisante Frage!!!

und zwar habe ich vor ein JLabel (oder was auch immer)
durch drücken und gleichzeitigen ziehen an eine andere position zu ziehen und zwar so das jeder einzelschritt
den ich mit der maus mach auch angezeigt wird...

ich habe bereits ein programm geschrieben das so was ähnliches kann

aber seht bitte selbst

Code:
import javax.swing.*;
import java.awt.event.*;

public class starter implements MouseMotionListener, MouseListener
{
	JFrame f = new JFrame();
	JPanel pane = new JPanel();
	
	JLabel txt = new JLabel("XXXX");
	
	int x = 10;
	int y = 10;
	
	public starter()
	{
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setTitle("MouseTest");
		f.setSize(300,300);
		
		pane.setLayout(null);
		pane.addMouseListener(this);
		pane.addMouseMotionListener(this);
		//refresher r = new refresher();
		//r.start();
		txt.addMouseListener(this);
		txt.setBounds(x, y, 50, 20);
				
		pane.add(txt);
		
		f.setContentPane(pane);
		f.setVisible(true);
	}
	public static void main(String[] args)
	{
		starter s = new starter();
	}
	public void mouseDragged(MouseEvent e)
	{
		
	}
	public void mouseMoved(MouseEvent e)
	{
		System.out.println(e.getX() + " " + e.getY());
		this.x = e.getX();
		this.y = e.getY();
	}
	// --------------------
	public void mouseExited(MouseEvent e)
	{
		
	}
	public void mouseEntered(MouseEvent e)
	{
		
	}
	public void mouseClicked(MouseEvent e)
	{
			
	}
	public void mouseReleased(MouseEvent e)
	{
		System.out.println("Wieder setzen");
		txt.setBounds(x,y, 50,20);
		pane.add(txt);
		f.setContentPane(pane);
	}
	public void mousePressed(MouseEvent e)
	{
		pane.remove(txt);
		f.setContentPane(pane);
	}
}

ich schaffe es das JLabel an die andere position hüpfen zu lassen ...
habe schon viel versucht und komm einfach nicht weiter ...
weis jemand rat?

ist es vieleicht möglich ohne Event Listener die Mouse positionen direkt auszulesen ???
 
also ich kann mir vorstellen das mir dein progi sogar helfen könnte aber ich tu mir da geraden ein bisschen
Schwer da ich mit applets noch so gut wie überhaupt nicht gearbeitet habt.

aber wenn ich es richtig verstanden hab sollte es ein progi werden das bilder malt und das gemalte als objekte ansieht
die im nachhinein verschoben werden können.


Ich habe auch schon ein Kartenspiel spielbar gebracht ....
Da habe ich es mit auswahlrahmen versucht das problem zu umgehen...
also sprich ein klick auf die karte und der auswahlramen erscheint...
dann ein klick auf eine freie fläche und die karte hüpft da hin und deaktiviert den auswahlrahmen...

ist nicht wirklich schön drag & drop unterstüzung ist im prinzip das was ich will.

Das beispiel was ich gepostet hab hat mit ein Kartenspiel nicht viel gemeinsam ... aber ich wollte nur ein proggi das übersichtlich bleibt und verdeutlicht was für ein problem ich hab...
Ob das nun ein JLabel ist oder eine karte dürfte ziemlich egal sein..

das eingentliche problem ist jetzt wie mach ich es das die karte an maus cursor hängen bleibt bis der user sie über eine
ablagefläche wieder fallen lässt?
 
hopla..... jetzt bin ich auf den trichter gekommen jetzt fehlt eigentlich nur noch der feinschliff...

Code:
import javax.swing.*;
import java.awt.event.*;

public class starter implements MouseMotionListener
{
	JFrame f = new JFrame();
	JPanel pane = new JPanel();
	
	JLabel txt = new JLabel("XXXX");
	
	int x = 10;
	int y = 10;
	
	public starter()
	{
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setTitle("MouseTest");
		f.setSize(300,300);
		
		pane.setLayout(null);
		
		pane.addMouseMotionListener(this);
		txt.addMouseMotionListener(this);

		txt.setBounds(x, y, 50, 20);
				
		pane.add(txt);
		
		f.setContentPane(pane);
		f.setVisible(true);
	}
	public static void main(String[] args)
	{
		starter s = new starter();
	}
	public void mouseDragged(MouseEvent e)
	{
		System.out.println(e.getX() + " " + e.getY());
		this.x = e.getX();
		this.y = e.getY();
		// -----------
		pane.remove(txt);
		f.setContentPane(pane);
		System.out.println("Wieder setzen");
		txt.setBounds(x,y, 50,20);
		pane.add(txt);
		f.setContentPane(pane);
	}
	public void mouseMoved(MouseEvent e)
	{}
}

jetzt ist folgendes zu bemängeln ....
wenn ich auf das panel die maustaste fest halt und dann die maus beweg verschiebt sich das JLabel direkt unter der maus!! das ist prima so ..... leider kann ich später dann nicht mehr genau wissen was der user für eine karte wählen wollte wenn dann mal mehrere karten (bzw. JLabels) liegen.

wenn man es aber anklickt dann hinkt es der maus ziemlich zuckelig hinterher... und im nachhinein sitzt es wieder am ursprungsort.... :?
 
Diese drei kommen weg:
Code:
       txt.addMouseMotionListener(this);
        pane.remove(txt);
        pane.add(txt);
Die Anweisung "f.setContentPane(pane)" braucht natürlich nur einmal zu erfolgen (im Konstruktur).
"txt.setBounds(x,y, 100,20)" kannst du durch "txt.setLocation(x,y)" ersetzen.

Was der User für eine Karte wählen wollte:
Code:
selectedCard = (JLabel)pane.getComponentAt(e.getPoint());
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben