Verschiebbares JPanel "ruckelt" im Randbereich

Diskutiere Verschiebbares JPanel "ruckelt" im Randbereich im AWT, Swing, JavaFX & SWT Bereich.
B

blz

Hallo, ich arbeite mit einem verschiebbaren JPanel in einem Frame.
Ich möchte eine Begrenzung einbauen, so dass das JPanel immer komplett sichtbar ist.
Zunächst habe ich nur einmal den linken und oberen Rand überprüft. (Methode mouseDragged)
Es funktioniert auch, aber wenn man sich (schnell) dem Randbereich nähert, dann läuft das Ganze sehr unflüssig und ruckelt.
Man muss dann mit der Maus absetzen und neu ansetzen und kann es erst dann ganz zum Rand schieben.
Woran liegt das?
Danke für die Hilfe!

Java:
    private class MyMouseAdapter extends MouseAdapter {
        int dx;
        int dy;
        
        @Override
        public void mouseDragged(MouseEvent arg0) {            
            if (arg0.getComponent() == actPanel) {
                
                int newx = arg0.getXOnScreen() - dx;
                int newy = arg0.getYOnScreen() - dy;
                
                if (newx >= 0 && newy >= 0)
                    actPanel.setLocation(newx, newy);                
            }
        }

        @Override
        public void mousePressed(MouseEvent arg0) {
            actPanel = (JPanel) arg0.getSource();  
            dx = arg0.getXOnScreen() - actPanel.getX();            
            dy = arg0.getYOnScreen() - actPanel.getY();
        }

        @Override
        public void mouseReleased(MouseEvent arg0) {            
            dx=0;
            dy=0;
        }
        
        @Override
        public void mouseEntered(MouseEvent e) {
            actPanel.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
        }
    }
 
MoxxiManagarm

MoxxiManagarm

Java:
if (newx >= 0 && newy >= 0)
Ich vermute das wird zu Missverhalten führen, wenn sich nur eine Koordinate an den Rand bewegt, also wenn du das Element nicht in die Ecke schiebst, sondern an den linken Rand. Ich würde eher sowas als richtiger vermuten ohne es genauer betrachtet oder getestet zu haben

Java:
actPanel.setLocation(newx > 0 ? newx : 0, newy > 0 ? newy : 0);
 
B

blz

Danke, logisch!
Denkfehler war, dass ich dachte, beim Draggen wird jede einzelne Pixelposition nacheinander gezeichnet.
Dann würde mein Code passen.
Da das aber in der Realität wohl nicht so ist (abhängig wovon auch immer) kommt es natürlich zu Fehlern, wie du sagst.
 
Thema: 

Verschiebbares JPanel "ruckelt" im Randbereich

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben