MouseListener und ActionListener kombinieren

  • Themenstarter Themenstarter Coldstorm
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

Coldstorm

Gast
Hallo,
ich hab ein Brettspiel(Schach) mit Java AWT programmiert...also zwei menschliche Gegenspieler gegeneinander und mit MouseListener...nun ist mir eingefallen, dass ich noch ein Menü brauche(Hilfe, neues Spiel, etc.)
Wie kann ich das dann anstellen? Weil meine Klasse(ist nur eine) erbt von MouseListener, muss ich für das Menü noch eine zusätzliche Klasse erstellen, die dann von ActionListener erbt oder wie geht das?
Vielen Dank im Voraus
Lg
 
MouseListener und ActionListener sind Interface, eine Klasse könnte beides sein
 
weiter weiß ich nicht, was deine Frage ist,

jedes Programm muss erst programmiert werden, korrekt
 
also wie oben beschrieben, hab ich eine Klasse mit AWT und MouseListener programmiert, funktioniert einwandfrei...nur möchte ich jetzt noch ein JMenu haben, wo ich Hilfe anzeigen, das Spiel neu starten etc....und das muss ich doch mit dem ActionListener machen ja? Aber eine Klasse kann ja nicht zwei Interfaces implementieren...was könnte ich jetzt machen?
 
SlaterB hat gesagt.:
MouseListener und ActionListener sind Interface, eine Klasse könnte beides sein

oder um dir nochmal direkt zu widersprechen:
> eine Klasse kann ja nicht zwei Interfaces implementieren
falsch 😉
 
hm kann ich schreiben

public class chess implements MouseListener implements ActionListener
 
eigentlich könntest du auch die Syntax nachschlagen oder ein paar Möglichkeiten durchprobieren,
aber bevor du die Geduld verlierst:

public class Test implements MouseListener, ActionListener

Klassen unbedingt groß scheiben! Variablen klein!
 
hm gut...und wie kann ich jetzt, das Applet in den JFrame stecken(meine Klasse erbt von Applet)
 
was dein Programm ansonsten macht habe ich nicht verstanden,
gewiss sollte aber in keinem Programm ein Applet mit einem JFrame agieren
 
sonst macht das Spiel nichts...man kann Schach spielen
sagen wir mal die Klasse Schach erbt von JFrame und implementiert MouseListener und ActionListener
dann funktioniert alles bis auf das:

Bild[ BauerS ] = getImage( getCodeBase(), "images/BauerS.gif" );
Bild[ TurmS ] = getImage( getCodeBase(), "images/TurmS.gif" );
Bild[ SpringerS ] = getImage( getCodeBase(), "images/SpringerS.gif" );

da unterstreicht er mir immer getCodeBase
mit der Fehlermeldung: The methode getCodeBase is undefined for the type Schach
Wenn ich allerdings Schach extends Applet mache, zeigt er mir den Fehler nicht an...aber das will ich ja nicht, sonst erscheint ja das JFrame mit dem Menü und das Applet zu Spielen gleichzeitig mit zwei Fenstern
 
programmierst du ein Applet für eine Webseite oder ein normales Java-Programm,
das ist die grundlegende Frage,

nur zum Bilderladen brauchst du kein Applet,
da gibts auch

new ImageIcon(fileName);
ImageIO.read(file);
oder anderes (google java frame bild laden)
 
nein Applet brauch ich eigentlich nicht, muss nicht für Website sein...aber das geht ned

Code:
public void init()
    {
	Bild = new ImageIcon[12];
	Bild[ BauerS ] = getImage( getCodeBase(), "images/BauerS.gif" );
	Bild[ TurmS ] = getImage( getCodeBase(), "images/TurmS.gif" );
	Bild[ SpringerS ] = getImage( getCodeBase(), "images/SpringerS.gif" );
	Bild[ LaeuferS ] = getImage( getCodeBase(), "images/LaeuferS.gif" );
	Bild[ DameS ] = getImage( getCodeBase(), "images/DameS.gif" );
	Bild[ KoenigS ] = getImage( getCodeBase(), "images/KoenigS.gif" );
	Bild[ BauerW ] = getImage( getCodeBase(), "images/BauerW.gif" );
	Bild[ TurmW ] = getImage( getCodeBase(), "images/TurmW.gif" );
	Bild[ SpringerW ] = getImage( getCodeBase(), "images/SpringerW.gif" );
	Bild[ LaeuferW ] = getImage( getCodeBase(), "images/LaeuferW.gif" );
	Bild[ DameW ] = getImage( getCodeBase(), "images/DameW.gif" );
	Bild[ KoenigW ] = getIconImage(images/KoenigW.gif);

ich hab das letzte geändert, muss das in Anführungszeichen oder darf ich da keinen Pfad angeben?
 
Von den elementarsten Dingen keine Ahnung haben, aber Schach programmieren wollen ...

Code:
Bild[0] = new ImageIcon(ImageIO.read(new File("images/BauerS.gif")));

das package images muss sich dafür im Classpath befinden
 
jetzt will ich das Schachbrett zeichnen

Code:
Image offScrImage = createImage( d.width, d.height );
		Graphics og = offScrImage.getGraphics();

		int xoff = d.width / 8;
		int yoff = d.height / 8;

...
...
hier hab ich das mit drawImage gemacht, aber das ist ja jetzt kein Image mehr, sondern ein ImageIcon...
wie mache ich folgendes mit ImageIcon??

Code:
int nPiece = Brett[ r ][ c ];
				if ( nPiece >= 0 ) {
					og.drawImage( Bild[ nPiece ],
							c * xoff,
							r * yoff,
							this );

Weil drawImageIcon gibt es ja nicht oder?

Fehlermeldung ist folgende:
The method drawImage(Image, int, int, ImageObserver) in the type Graphics is not applicable for
the arguments (ImageIcon, int, int, Schach)

Woran kann ich es beheben?
 
drawImage(icon.getImage())

bzw. im Array gleich die Images speichern, nicht die Icons, dann an anderer Stelle icon.getImage() aufrufen
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben