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%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.
Inspiriert von Ihrem Code und der Benutzer-Compilex-Antwort folgt eine Demonstration:
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.