# MouseListener und ActionListener kombinieren



## Coldstorm (11. Feb 2009)

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


----------



## SlaterB (11. Feb 2009)

MouseListener und ActionListener sind Interface, eine Klasse könnte beides sein


----------



## Guest (11. Feb 2009)

ja, und weiter? Aber wie stell ich das dann an


----------



## SlaterB (11. Feb 2009)

weiter weiß ich nicht, was deine Frage ist,

jedes Programm muss erst programmiert werden, korrekt


----------



## Guest (11. Feb 2009)

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 (11. Feb 2009)

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


----------



## Guest (11. Feb 2009)

hm kann ich schreiben

public class chess implements MouseListener implements ActionListener


----------



## SlaterB (11. Feb 2009)

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!


----------



## Guest (11. Feb 2009)

hm gut...und wie kann ich jetzt, das Applet in den JFrame stecken(meine Klasse erbt von Applet)


----------



## SlaterB (11. Feb 2009)

was dein Programm ansonsten macht habe ich nicht verstanden,
gewiss sollte aber in keinem Programm ein Applet mit einem JFrame agieren


----------



## Guest (11. Feb 2009)

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


----------



## SlaterB (11. Feb 2009)

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)


----------



## Guest (11. Feb 2009)

nein Applet brauch ich eigentlich nicht, muss nicht für Website sein...aber das geht ned


```
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?


----------



## Verjigorm (11. Feb 2009)

Von den elementarsten Dingen keine Ahnung haben, aber Schach programmieren wollen ...


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

das package images muss sich dafür im Classpath befinden


----------



## Guest (11. Feb 2009)

jetzt will ich das Schachbrett zeichnen


```
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??


```
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?


----------



## SlaterB (11. Feb 2009)

ImageIcon.getImage()


----------



## Guest (11. Feb 2009)

das ist doch get...bräuchte draw ?


----------



## SlaterB (11. Feb 2009)

drawImage(icon.getImage())

bzw. im Array gleich die Images speichern, nicht die Icons, dann an anderer Stelle icon.getImage() aufrufen


----------

