Wenn ich einen JInternalFrame in einem JDesktopPane habe, ist der JInternalFrame beweglich (was gut ist). Es ist jedoch möglich, es außerhalb des sichtbaren Bereichs des JDesktopPane zu verschieben (was ich nicht so mag)
Um selbst zu sehen, hier ist ein Beispielcode:
%Vor%Ist es möglich, JInternalFrame oder JDesktopPane so zu setzen, dass sie dies nicht zulassen?
Der Mitarbeiter, der für die Verschiebung / Größenänderung zuständig ist, ist der DesktopPaneManager. Also würde ich versuchen, die Bewegung auf den Bereich zu beschränken. Hier ist eine schnelle & amp; schmutziger Beweis des Konzeptes:
%Vor%Es gibt einige Probleme zu lösen, offensichtlich :-) F.i.
Bearbeiten
nur zur Verdeutlichung: Mit "nicht reagierend" meine ich, dass der Benutzer die Maustaste loslassen und erneut drücken / ziehen muss (sobald der interne Frame die Grenzen des Desktops erreicht hat), um die Position weiter zu verschieben. Das ist nicht allzu überraschend, da der BorderListener (das ist der von BasicInternalFrame installierte mouseListener) einige Zustände im Zusammenhang mit dem ersten Drücken behält und Anfragen dann relativ zu diesem ursprünglichen Ort neu lokalisiert werden. Ziehen Sie die Maus mit dem Rahmen fest irgendwo verwirrt diesen internen Zustand.
Interessanterweise scheint es bei dem Blick auf den Code die Absicht zu geben, die Bewegung zu begrenzen, um sie nicht nach außen zu schieben,
%Vor%ist jedoch relativ zur aktuellen Mausposition.
Volle Anerkennung für kleopatra, dass er mich in die richtige Richtung weist.
Ich denke, ich habe das Problem der Nicht-Reaktion gelöst und teile meine Lösung hier. Wenn der Mauspunkt außerhalb des Bereichs liegt, befindet sich der interne Rahmen nach der Kleopatra-Antwort am Rand des Bereichs. Auch dies folgt weiterhin der Maus - dh wenn Sie die Maus vom unteren Rand des Fensters bewegen und dann auf die rechte Seite des Fensters umrunden, folgt der Rahmen am unteren Rand des Fensters und dann auf der rechten Seite Sand der Scheibe.
%Vor%Es ist wichtig, dass der obere Teil des JInternalFrames nicht ausgeblendet wird, da sich dort die Griffleiste und die Steuerschaltflächen befinden. Stellen Sie als letzten Schritt vor dem Festlegen von Grenzen sicher, dass Ihr y-Wert nicht negativ ist, beispielsweise mit einer Anweisung wie y = Math.max (0, y).
Tags und Links java swing jinternalframe jdesktoppane