Moin moin,
ich habe da ein Problem beim verschieben von Objekten. Ich habe ein Fenster in dem ich eine ToolBar eine StatusBar
und ein ScrollPane habe. Die ToolBar ist vorerst egal. Die StatusBar nutze ich derzeit um mir Koordinaten anzeigen
zu lassen. Auf dem ScrollPane befindet sich ein jPanel worauf sich wiederum zwei jPanel (flaeche, flaeche2) befinden
die ich verschieben kann.
So sieht das aus
flaeche und flaeche2 besitzen jeweils ein mousePressed und ein mouseDragged Event um sie zu verschieben.
Das Verschieben der Flächen nach links und oben soll geblockt werden (rote Linie), d.h. es soll nicht möglich sein die Flächen
aus dem Fensterfocus zu schieben. Wenn jemand versucht die Fläche über die linke Grenze oder über die obere Grenze zu schieben,
dann soll es einfach an der Grenze andocken.
Wie hier zu sehen
Dazu habe ich folgende Funktion geschrieben.
Diese Funktion rufe ich im mousePressed sowie im mouseDragged Event auf. Und genau in dieser Funktion scheint der Fehler zu liegen,
denn wenn ich an der oberen Grenze angekommen bin und dann die Fläche nach links verschiebe bewegt sie sich aus dem Fenster.
Wenn ich in der Funktion in der zweiten if abfrage die Variable intObenLinksX gegen jPanelFlaeche2.getX() austausche dann funktioniert
es ohne Probleme.
Was mache ich falsch?
ich habe da ein Problem beim verschieben von Objekten. Ich habe ein Fenster in dem ich eine ToolBar eine StatusBar
und ein ScrollPane habe. Die ToolBar ist vorerst egal. Die StatusBar nutze ich derzeit um mir Koordinaten anzeigen
zu lassen. Auf dem ScrollPane befindet sich ein jPanel worauf sich wiederum zwei jPanel (flaeche, flaeche2) befinden
die ich verschieben kann.
So sieht das aus
flaeche und flaeche2 besitzen jeweils ein mousePressed und ein mouseDragged Event um sie zu verschieben.
Das Verschieben der Flächen nach links und oben soll geblockt werden (rote Linie), d.h. es soll nicht möglich sein die Flächen
aus dem Fensterfocus zu schieben. Wenn jemand versucht die Fläche über die linke Grenze oder über die obere Grenze zu schieben,
dann soll es einfach an der Grenze andocken.
Wie hier zu sehen
Dazu habe ich folgende Funktion geschrieben.
Code:
private void getJPanelFlaeche2Koordinaten()
{
int intObenLinksX = jPanelFlaeche2.getX();
int intObenLinksY = jPanelFlaeche2.getY();
int intUntenRechtsX = jPanelFlaeche2.getX() + jPanelFlaeche2.getWidth();
int intUntenRechtsY = jPanelFlaeche2.getY() + jPanelFlaeche2.getHeight();
jLabel1.setText( "oben links x: " + intObenLinksX + " " + "y: " + intObenLinksY );
jLabel2.setText( "unten rechts x: " + intUntenRechtsX + " " + "y: " + intUntenRechtsY );
/** Verhindert, dass die verschiebbaren Flaechen
* das Fenster nach oben oder nach rechts verlassen koennen.
*/
if( intObenLinksX < 0 )
{
jPanelFlaeche2.setLocation( 0 , intObenLinksY );
}
if( intObenLinksY < 0 )
{
jPanelFlaeche2.setLocation( intObenLinksX , 0 );
}
}
Diese Funktion rufe ich im mousePressed sowie im mouseDragged Event auf. Und genau in dieser Funktion scheint der Fehler zu liegen,
denn wenn ich an der oberen Grenze angekommen bin und dann die Fläche nach links verschiebe bewegt sie sich aus dem Fenster.
Wenn ich in der Funktion in der zweiten if abfrage die Variable intObenLinksX gegen jPanelFlaeche2.getX() austausche dann funktioniert
es ohne Probleme.
Was mache ich falsch?