tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
347
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    moemaster moemaster ist offline Mitglied Gold
    Registriert seit
    Nov 2008
    Ort
    Hamburg
    Beiträge
    106
    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
     

  2. #2
    moemaster moemaster ist offline Mitglied Gold
    Registriert seit
    Nov 2008
    Ort
    Hamburg
    Beiträge
    106
    Keiner eine Idee?
     

  3. #3
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    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ß
    Klaus
     
    Es 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 !!

  4. #4
    moemaster moemaster ist offline Mitglied Gold
    Registriert seit
    Nov 2008
    Ort
    Hamburg
    Beiträge
    106
    was meinst du mit Schrittweite?
     

  5. #5
    Shiso Shiso ist offline Rookie
    Registriert seit
    Mar 2009
    Beiträge
    6
    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.
     

  6. #6
    d4rkY89 d4rkY89 ist offline Mitglied Silber
    Registriert seit
    May 2008
    Beiträge
    72
    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

  1. Drag n Drop
    Von kerstel im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 21.01.10, 13:36
  2. Drag 'n' Drop mit JS
    Von ts230 im Forum Javascript & Ajax
    Antworten: 23
    Letzter Beitrag: 26.08.08, 10:23
  3. Drag & Drop mit <tr> ?!
    Von ev0lst im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 12.08.07, 10:23
  4. SWT: Ghosted Drag-Image bei Drag & Drop
    Von snake_plissken im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 15.04.06, 23:36
  5. Drag and Drop
    Von Reverent im Forum .NET Archiv
    Antworten: 0
    Letzter Beitrag: 11.06.04, 17:08

Stichworte