Ziehen Sie ein Jlabel über den Bildschirm

8

Ich versuche also, ein JLabel auf einen JFrame zu klicken und zu ziehen. Der folgende Code ermöglicht es, dass ein JLabel um den Bildschirm bewegt wird, wenn die Maus an einem beliebigen Punkt auf dem Bildschirm gedrückt / gezogen wird. Ich bin mir jedoch nicht sicher, wie ich einen zweiten ActionListener hinzufügen kann, um zu prüfen, ob die Maus auf das Label klickt ist die Lösung.

Ich hätte gerne mehrere JLabels auf dem Bildschirm, so dass das einzige Etikett, das verschoben wird, dasjenige ist, auf das die Maus geklickt hat und jetzt zieht.

Danke.

%Vor%     
jjj 04.02.2011, 00:12
quelle

4 Antworten

19

Eine andere Möglichkeit besteht darin, das JLabel zu einem JLayeredPane oder einem JPanel hinzuzufügen, das von einem JLayeredPane gehalten wird, und einen MouseAdapter als MouseListener und MouseMotionListener von JLayeredPane hinzuzufügen. Dann, wenn du auf das Label klickst, verschiebe es auf JLayeredPanes JLayeredPane.DRAG_LAYER, so dass es sich vor allem anderen bewegt, und lege dann das JLabel auf die für die Freigabe der Maus am besten geeignete Ebene. Ich habe festgestellt, dass dies gut funktioniert, wenn Sie beispielsweise Schachfiguren auf einem Schachbrett bewegen, und Sie möchten sicherstellen, dass das zu bewegende Teil beim Ziehen über allen anderen Teilen angezeigt wird.

Zusatz: Sie haben wahrscheinlich diesen Thread verlassen, aber wenn Sie zurückkommen oder zum Wohle anderer, wollte ich klarstellen, was ich meinte, indem ich ein JLayeredPane mit einem Beispiel verwende.

%Vor%

Bitte zögern Sie nicht, Fragen zu stellen, Klärungsbedarf oder Korrekturen.

    
Hovercraft Full Of Eels 04.02.2011 04:18
quelle
3

Fügen Sie dem Label statt dem Panel einen Maus-Listener hinzu. (Sie benötigen möglicherweise noch einen Maus-Listener für das Ziehen auf dem Bedienfeld, aber mindestens das auf dem Etikett kann Ihnen sagen, ob es ausgewählt wurde).

    
jzd 04.02.2011 02:48
quelle
2

Inspiriert von Ihrem Code und der Benutzer-Compilex-Antwort folgt eine Demonstration:

Screenshot

Vollständiger Code:

%Vor%

Erklärungen werden als Kommentare hinzugefügt.

Tipps :

Sehen Sie sich die documentation on Container.findComponentAt(int x, int y) an. , wenn Sie Component s auf dem dragP Container hinzufügen, mit Ausnahme von "ziehbaren" Labels.

Sie können stattdessen auch % co_de verwenden % , in diesem Fall. Ich schlage vor, dass Sie zuerst ihre (kleine) Dokumentation lesen.

    
thanopi57 24.08.2016 13:48
quelle
1

Erstellen Sie zwei globale Variablen:

%Vor%

Erstellen Sie dann zwei Ereignisse (mousePressed und mouseDragged über JLabel):

%Vor%     
compilex 08.05.2014 03:13
quelle

Tags und Links