ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
347
347
EMPFEHLEN
-
Moin,
ich habe gerade mal ein wenig mit MouseMotionListenern rumgespielt und dachte mir dann, dass ich einfach mal ein JPanel auf einem JFrame herziehe und somit dessen Position verändere. Klappt allerdings nur so halb... Immer wenn ich das Panel ziehe, verändert es zwar seine Position, allerdings "flackert es die ganze Zeit und springt hin und her, wenn ich die Maus bewege. Steht der Mauszeiger still, hört das Springen meistens auf. Woran kann das liegen? Um mein Problem ein wenig deutlicher zu machen, geb ich euch hier mal meinen Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
import java.awt.Color; import java.awt.event.*; import javax.swing.*; import javax.swing.border.Border; public class DragDrop extends JFrame{ JPanel pnlTest = new JPanel(); Border border = BorderFactory.createLineBorder(Color.black); public static void main(String [] args){ DragDrop frame1 = new DragDrop(); frame1.initialize(); } public void initialize(){ setLayout(null); setBounds(10,10,800,600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setExtendedState(JFrame.MAXIMIZED_BOTH); setUndecorated(true); setVisible(true); add(pnlTest); } public DragDrop(){ pnlTest.setBounds(0, 0, 200, 120); pnlTest.setBorder(border); pnlTest.addMouseMotionListener(new MouseMotionListener(){ public void mouseDragged(MouseEvent e) { pnlTest.setBounds(e.getX()+100, e.getY()+60, 200, 120); } public void mouseMoved(MouseEvent arg0) {} }); } }
Für Hilfe wäre ich sehr dankbar :o)
Beste Grüße aus Hamburg
-
Keiner eine Idee?
-
11.06.10 12:49 #3
Moin,
kann es sein, dass die jeweilige Schrittweite in "mouseDragged:
nlTest.setBounds()" zu groß ist
Vlt. hilft Dir dies hier weiter:
http://www.teialehrbuch.de/Kostenlos...ewegungen.html
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
was meinst du mit Schrittweite?
-
Warum benutzt du nicht das Java Drg&Drop Paket?
Vielleicht hilft dir dieser Beitrag: http://forum.netzgemein.de/ftopic34.html
Anstelle das Buttons kann man auch ein Panel einfügen, dazu musst du allerdings die ViewTransferable ein wenig anpassen.
Und zwar so, dass du ihm ein Panel übergibst.
Ich weiß allerdings nicht ob man als dropTarget ein Frame benutzen kann.
-
Hallo,
dein Fehler in dem Programm ist, dass du die relativen Koordinaten der Maus innerhalb des Frames auf die Koordinaten des Desktops anwendest.
Beispiel:
Du Klicks mit der Maus auf die Koordinaten "30, 30" des Fensters. Das Fenster springt in diesem Moment zu den Koordinaten "30, 30" des Desktops. Deshalb musst du die "Anklickkoordinaten" im Fenster von den Koordinaten der Maus vom Desktop abziehen.
Hier hab ich dir mal einen Code geschrieben, der das macht (ist in Worten ziemlich blöd zu erklären):
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
import java.awt.DisplayMode; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JFrame; @SuppressWarnings("serial") public class Foo extends JFrame { private int touchX = 0, touchY = 0; private boolean keepInsideScreen = true; public static void main(String[] args) { new Foo(); } public Foo() { setSize(800, 600); setLocationRelativeTo(null); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); addMouseListener(new MouseInputHandler()); addMouseMotionListener(new MouseMotionHandler()); setVisible(true); } private class MouseInputHandler extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { touchX = e.getX(); touchY = e.getY(); } } private class MouseMotionHandler extends MouseMotionAdapter { @Override public void mouseDragged(MouseEvent e) { int x = e.getXOnScreen() - touchX; int y = e.getYOnScreen() - touchY; if (keepInsideScreen) { DisplayMode dm = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode(); int screenWidth = dm.getWidth(); int screenHeight = dm.getHeight(); if (x < 0) { x = 0; } else if (x > screenWidth - getWidth()) { x = screenWidth - getWidth(); } if (y < 0) { y = 0; } else if (y > screenHeight - getHeight()) { y = screenHeight - getHeight(); } } setLocation(x, y); } } }
Geändert von d4rkY89 (12.06.10 um 14:29 Uhr)
Ähnliche Themen
-
Drag n Drop
Von kerstel im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 21.01.10, 13:36 -
Drag 'n' Drop mit JS
Von ts230 im Forum Javascript & AjaxAntworten: 23Letzter Beitrag: 26.08.08, 10:23 -
Drag & Drop mit <tr> ?!
Von ev0lst im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 12.08.07, 10:23 -
SWT: Ghosted Drag-Image bei Drag & Drop
Von snake_plissken im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 15.04.06, 23:36 -
Drag and Drop
Von Reverent im Forum .NET ArchivAntworten: 0Letzter Beitrag: 11.06.04, 17:08





Zitieren
Login





