Hi!
Nachdem ich gesehen habe, dass hier viele von euch Kartenspiele programmieren, müsste ich ja an der richtigen Stelle sein.
Während sich hier schon alle mit Kollisionsabfragen beschäftigen, ist mein Anliegen wohl noch ein wenig grundlegender: In Kartenspielen klickt man auf die Karten, damit mit diesen etwas geschieht. Nur, wie muss ich vorgehen, dass Java erkennt, dass auf eine Karte geklickt wurde?
Meine Karten werden als Objekte der Klasse "Card" gehandhabt, welche von JPanel erbt. Zuerst dachte ich, es würde reichen, der Klasse einen MouseListener hinzuzufügen. Wenn ich aber über die MouseEntered-Methode abfrage, an welcher Stelle die Maus den JPanel betritt, stellt sich heraus, dass JPanels anscheinend über dieselbe Größe verfügen wie der JFrame, auf dem sie gezeichnet sind. Wenn ich einer JPanel-Klasse also einen MouseListener hinzufüge, bezieht sich der Listener auf den kompletten Panel und nicht auf eine bestimmte Komponente darin.
Als nächstes probierte ich aus, einfach dem Image-Objekt, welches das GIF-Image der Karte speichert, mit einem MouseListener auszustatten, aber da beschwert sich Java der Syntax wegen. Man kann einem Image-Objekt keinen MouseListener hinzufügen.
Schließlich hatte ich die Idee, den JPanel einfach zu verkleinern, sprich, ihn an die Größe des Karten-GIFs anzupassen. Dann könnte man dem JPanel einfach nach wie vor einen MouseListener geben und dennoch würde MouseEntered nur dann reagieren, wenn sich die Maus über dem Bild befindet. Nach etwas Googlen hieß es, man könne die JPanel-Abmessung mit den Methoden setPreferredSize(int x, int y), setMinimumSize(int x, int y) und setMaximumSize(int x, int y) festlegen, doch auch das hat nicht geklappt.
Weil ich jetzt keine Ideen mehr habe, möchte ich euch fragen, wie man sowas elegant löst. Ich will einfach nur anklickbare Karten haben, die nicht als JButton oder sowas realisiert sind. Am liebsten wäre mir natürlich noch immer, wenn ich einfach dem Bild den MouseListener zuordnen könnte, aber das geht ja leider nicht.
Ich möchte noch erwähnen, dass ich das Kartenspiel als Standalone und nicht als Applet schreibe.
Über Ideen zur Problemlösung würde ich mich sehr freuen!
Gruß!
Nachdem ich gesehen habe, dass hier viele von euch Kartenspiele programmieren, müsste ich ja an der richtigen Stelle sein.
Während sich hier schon alle mit Kollisionsabfragen beschäftigen, ist mein Anliegen wohl noch ein wenig grundlegender: In Kartenspielen klickt man auf die Karten, damit mit diesen etwas geschieht. Nur, wie muss ich vorgehen, dass Java erkennt, dass auf eine Karte geklickt wurde?
Meine Karten werden als Objekte der Klasse "Card" gehandhabt, welche von JPanel erbt. Zuerst dachte ich, es würde reichen, der Klasse einen MouseListener hinzuzufügen. Wenn ich aber über die MouseEntered-Methode abfrage, an welcher Stelle die Maus den JPanel betritt, stellt sich heraus, dass JPanels anscheinend über dieselbe Größe verfügen wie der JFrame, auf dem sie gezeichnet sind. Wenn ich einer JPanel-Klasse also einen MouseListener hinzufüge, bezieht sich der Listener auf den kompletten Panel und nicht auf eine bestimmte Komponente darin.
Als nächstes probierte ich aus, einfach dem Image-Objekt, welches das GIF-Image der Karte speichert, mit einem MouseListener auszustatten, aber da beschwert sich Java der Syntax wegen. Man kann einem Image-Objekt keinen MouseListener hinzufügen.
Schließlich hatte ich die Idee, den JPanel einfach zu verkleinern, sprich, ihn an die Größe des Karten-GIFs anzupassen. Dann könnte man dem JPanel einfach nach wie vor einen MouseListener geben und dennoch würde MouseEntered nur dann reagieren, wenn sich die Maus über dem Bild befindet. Nach etwas Googlen hieß es, man könne die JPanel-Abmessung mit den Methoden setPreferredSize(int x, int y), setMinimumSize(int x, int y) und setMaximumSize(int x, int y) festlegen, doch auch das hat nicht geklappt.
Weil ich jetzt keine Ideen mehr habe, möchte ich euch fragen, wie man sowas elegant löst. Ich will einfach nur anklickbare Karten haben, die nicht als JButton oder sowas realisiert sind. Am liebsten wäre mir natürlich noch immer, wenn ich einfach dem Bild den MouseListener zuordnen könnte, aber das geht ja leider nicht.
Ich möchte noch erwähnen, dass ich das Kartenspiel als Standalone und nicht als Applet schreibe.
Über Ideen zur Problemlösung würde ich mich sehr freuen!
Gruß!