mich plagt ein kleines Problem und ich hoffe, ihr könnt mir weiterhelfen.
Momentan schreibe ich nen kleines Kartenspiel. Nichts aufregendes 6x4 Karten werden angezeigt und auf Mausklick mit ner Animation gedreht. Die Karten zeichne ich mit einer Unterklasse von Canvas direkt in den Frame.
Bei einem Klick soll die Karte nun drehen. Etwa über eine Methode "turnCard(int xPos, int yPos, Graphics g)".
Wenn ich obige Methode über den MouseListener aufrufen will, scheitere ich daran, dass die Memberklasse ( MouseListener) nicht auf Graphics g zugreifen kann. Als "final Grahics g" geht es, doch es passiert nichts...
Wie kann ich also mit Übergeben von X- und Y-Koordinaten des MouseListeners an besagter Stelle zeichnen lassen?
du braucht überhaupt kein Graphics objekt erzeugen. Ich hab mach zurzeit auch was ähnliches du schreibst in klasse 1, von wo du dein Fenster beispielsweise aufrufst:
So ähnlich schaut auch mein Code aus. Das Zeichnen klappt ja auch.
Das Problem liegt darin, dass mir der MouseListener vorgibt, wo ich als nächstes zu zeichnen habe und ich aus dem MouseListener heraus irgendwie ne paint-Methode mit diesen Koordinaten-Parametern aufrufen muss.
Java:
classGameFrameextendsJFrame{publicGameFrame(){setSize(775,500);Engine engine =newEngine();add(engine);}}classEngineextendsCanvas{publicvoidpaint(Graphics g){paintBackground(g);this.addMouseListener(newMouseListener(){@OverridepublicvoidmouseClicked(MouseEvent e){// TODO Auto-generated method stubint x = e.getX();int y = e.getY();//Hier Aufruf einer paint-Methode zum Zeichnen an (x,y) - wie?}
Zeile 26: Wie kann ich von dort aus also zeichnen?
Im MouseListener Speicherst du deine Koordinaten in ein Array oder so welches dann immer neu gezeichnet wird, wenn die Paint-Methode aufgerufen wird. Die Paint-Methode wird automatisch aufgerufen wenn das Bild neu gezeichnet werden muss (Fenster vergrössert, verschoben etc.). Du kannst auch Canvas.repaint() oder so ähnlich ausführen damit die paint-Methode neu aufgerufen wird.
Nein ich denke nicht. Bei jedem Fenster-vergrössern oder verschieben muss ja alles neu gezeichnet werden, und da musst du deine Zeichnung irgendwo gespeichert haben um die neu zu zeichnen.
Du kannst evtl schon das Grafikobjekt des Canvas holen mit getGraphics() (oder so ähnlich) und irgendwo sonst ausserhalb der paint-Methode was reinzeichnen. Dann wirst du aber Probleme haben dass die Zeichnung nicht korrekt aktualisiert wird, oder beim nächsten paint-aufruf wieder weg ist.
Oder hat hier jemand noch weiter Informationen? Sehr viel hab ich mich damit noch nicht beschäftigt.
u kannst evtl schon das Grafikobjekt des Canvas holen mit getGraphics() (oder so ähnlich) und irgendwo sonst ausserhalb der paint-Methode was reinzeichnen. Dann wirst du aber Probleme haben dass die Zeichnung nicht korrekt aktualisiert wird, oder beim nächsten paint-aufruf wieder weg ist.
Dann gewöhns dir ab. Es widerspricht dem "passiven-zeichnen" konzept von Java, wird meistens auch nicht im EDT ausgeführt und kann insgesamt sehr große Probleme geben.