Mitglied 7974
Gast
Hallo!
Ich möchte mit Java unter Swing ein Kartenspiel programmieren, stecke allerdings bei einer vielleicht simplen Sache fest. Man kennt ja von solchen Spielen, dass man auf eine Karte klickt und diese dann in die Mitte des Bildschirms schwebt und auf dem Ablagestapel landet.
Zu diesem Zweck ist es natürlich nötig, abzufragen, ob die Karte überhaupt angeklickt wurde. Weil bei mir jede Karte als eigenes JPanel-Objekt realisiert wurde, wäre es mir natürlich am liebsten, wenn ich der Karten-Klasse einfach einen MouseListener hinzufügen könnte. Das lässt sich auch machen, aber dann bezieht sich der Listener auf den kompletten JPanel welcher den kompletten JFrame einnimmt (public void mouseEntered(MouseEvent event) { ... } führt die Befehle in den geschweiften Klammer schon dann aus, wenn sich der Mauszeiger nur über dem Panel befindet, nicht erst, wenn er sich über dem Bild aufhält).
Die Karte wird durch ein GIF-Image dargestellt. Meine nächste Idee wäre also gewesen, einfach das Bild für den MouseListener zu registrieren, aber das scheint nicht zu klappen (Fehler beim Kompilieren - MouseListener lässt sich angeblich nicht bei einem Bild einsetzen).
Ich finde es einfach äußerst unelegant, wenn ich bei einer objektorientierten Programmiersprache nicht das Objekt an sich anklicken kann, sondern überprüfen muss, wo auf dem Bildschirm die Maus geklickt hat, um dann zu entscheiden, ob sich der Punkt im Pixelbereich des Kartenbildes aufgehalten hat oder nicht.
Daher folgende Fragen:
Vielen Dank für konstruktive Lösungsideen!
Ich möchte mit Java unter Swing ein Kartenspiel programmieren, stecke allerdings bei einer vielleicht simplen Sache fest. Man kennt ja von solchen Spielen, dass man auf eine Karte klickt und diese dann in die Mitte des Bildschirms schwebt und auf dem Ablagestapel landet.
Zu diesem Zweck ist es natürlich nötig, abzufragen, ob die Karte überhaupt angeklickt wurde. Weil bei mir jede Karte als eigenes JPanel-Objekt realisiert wurde, wäre es mir natürlich am liebsten, wenn ich der Karten-Klasse einfach einen MouseListener hinzufügen könnte. Das lässt sich auch machen, aber dann bezieht sich der Listener auf den kompletten JPanel welcher den kompletten JFrame einnimmt (public void mouseEntered(MouseEvent event) { ... } führt die Befehle in den geschweiften Klammer schon dann aus, wenn sich der Mauszeiger nur über dem Panel befindet, nicht erst, wenn er sich über dem Bild aufhält).
Die Karte wird durch ein GIF-Image dargestellt. Meine nächste Idee wäre also gewesen, einfach das Bild für den MouseListener zu registrieren, aber das scheint nicht zu klappen (Fehler beim Kompilieren - MouseListener lässt sich angeblich nicht bei einem Bild einsetzen).
Ich finde es einfach äußerst unelegant, wenn ich bei einer objektorientierten Programmiersprache nicht das Objekt an sich anklicken kann, sondern überprüfen muss, wo auf dem Bildschirm die Maus geklickt hat, um dann zu entscheiden, ob sich der Punkt im Pixelbereich des Kartenbildes aufgehalten hat oder nicht.
Daher folgende Fragen:
- Ist es möglich, einem Bild einen MouseListener zuzuordnen? Wenn ja, wie?
- Kann man die Größe eines JPanels ändern? Wäre es möglich, den JPanel einfach an die Kartenbildgröße anzugleichen, sodass der MouseListener des JPanels scheinbar zum MouseListener des Kartenbilds wird? Wenn ja, wie?
- Wie wäre es sonst noch möglich, herauszufinden, ob auf eine Karte geklickt wurde?
Vielen Dank für konstruktive Lösungsideen!