AWT-Klasse in SWING-Klasse umwandeln

Coldstorm

Gesperrt
Hi,
ich hab ein kleines Schachprogramm geschrieben in AWT mit MouseListener(nur für zwei menschliche Spieler).
Nun möchte ich es aber mit möglichst wenig Aufwand in eine SWING-Klasse umwandeln, also dass es ein JFrame ist und kein Applet mehr.
Das Programm funktioniert als Applet einwandfrei. Nur brauch ich jetzt noch ein Menü, und da hab ich mich entschieden, dies mit SWING und dem ActionListener zu implementieren...
Aber kann mir jemand helfen, wie ich das Applet möglichst einfach in ein JFrame stecke?

Hier mal der Code der Klasse, der Ordner images ist im Projekt, darin sind die ganzen Bilder der Figuren

Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.Math;
import javax.swing.*;

public class Schach extends Applet implements MouseListener
{
    Image   Bild[];
    
    static final int Schwarz = 0;
    static final int Weiß = 1;

    static final int Leer = -1;
    static final int BauerS = 0;
    static final int TurmS = 1;
    static final int SpringerS = 2;
    static final int LaeuferS = 3;
    static final int DameS = 4;
    static final int KoenigS = 5;
    static final int BauerW = 6;
    static final int TurmW = 7;
    static final int SpringerW = 8;
    static final int LaeuferW = 9;
    static final int DameW = 10;
    static final int KoenigW = 11;

    int Brett[][];

    int AktiveFigur[] = { -1, -1 };

    int nPlayer = Weiß;

    public void init()
    {
	Bild = new Image[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 ] = getImage( getCodeBase(), "images/KoenigW.gif" );

	// Erstelle Brett
	Brett = new int[8][8];

	for ( int i = 0; i < 8; ++i )
	    for ( int j = 0; j < 8; ++j )
		Brett[i][j] = Leer;

	Brett[0][0] = TurmS;
	Brett[0][1] = SpringerS;
	Brett[0][2] = LaeuferS;
	Brett[0][4] = DameS;
	Brett[0][3] = KoenigS;
	Brett[0][5] = LaeuferS;
	Brett[0][6] = SpringerS;
	Brett[0][7] = TurmS;
	Brett[1][0] = BauerS;
	Brett[1][1] = BauerS;
	Brett[1][2] = BauerS;
	Brett[1][3] = BauerS;
	Brett[1][4] = BauerS;
	Brett[1][5] = BauerS;
	Brett[1][6] = BauerS;
	Brett[1][7] = BauerS;

	Brett[7][0] = TurmW;
	Brett[7][1] = SpringerW;
	Brett[7][2] = LaeuferW;
	Brett[7][4] = DameW;
	Brett[7][3] = KoenigW;
	Brett[7][5] = LaeuferW;
	Brett[7][6] = SpringerW;
	Brett[7][7] = TurmW;
	Brett[6][0] = BauerW;
	Brett[6][1] = BauerW;
	Brett[6][2] = BauerW;
	Brett[6][3] = BauerW;
	Brett[6][4] = BauerW;
	Brett[6][5] = BauerW;
	Brett[6][6] = BauerW;
	Brett[6][7] = BauerW;

	addMouseListener( this );
    }

    public void destroy()
    {
	removeMouseListener( this );
    }

    public void paint( Graphics g )
    {
	Dimension d = getSize();

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

	int xoff = d.width / 8;
	int yoff = d.height / 8;
	
	/* Zeichnet Muster der schwarzen/weißen Quadrate, je
	 * nachdem, ob der Spieler schwarz oder weiß ist */
	
	for ( int c = 0; c < 8; ++c ) {
	    for ( int r = 0; r < 8; ++r ) {
		if ( (c + r) % 2 == 0 ) {
		    og.setColor( Color.gray );
		} else {
		    og.setColor( Color.white );
		}
		og.fillRect( xoff * c, yoff * r, xoff, yoff );

		/* Zeichne jedes Bild auf Brett */
	
		int nPiece = Brett[ r ][ c ];
		if ( nPiece >= 0 ) {
		    og.drawImage( Bild[ nPiece ],
				 c * xoff,
				 r * yoff,
				 this );
		}
	    }
	}

	/* Zeichne Markierung um die aktive Spielfigur */
	if ( AktiveFigur[0] >= 0 ) {
	    if ( nPlayer == Weiß )
		og.setColor( Color.red );
	    else
		og.setColor( Color.blue );

	    og.drawRect( xoff * AktiveFigur[0],
			yoff * AktiveFigur[1],
			xoff, yoff );
	    og.drawRect( xoff * AktiveFigur[0] - 1,
			yoff * AktiveFigur[1] - 1,
			xoff + 2, yoff + 2 );
	}

	g.drawImage( offScrImage, 0, 0, this );
    }

    boolean pruefeZugGerade( int c1, int r1, int c2, int r2 ) {
	boolean bOK = false;
	int nPiece = Brett[ r1 ][ c1 ];
	int nPType = nPiece % 6;
	int ZerstoereFigur = Brett[ r2 ][ c2 ];
	int nDestPType = ZerstoereFigur % 6;

	if ( c1 == c2 && r1 != r2 ) {
	    int rd;
	    if ( r1 < r2 )
		rd = 1;
	    else
		rd = -1;
		
	    bOK = true;
	    for ( int r = r1 + rd; r != r2; r += rd ) {
		if ( Brett[ r ][ c1 ] != -1 ) {
		    bOK = false;
		    break;
		}
	    }
	}
	else if ( r1 == r2 && c1 != c2 ) {
	    int cd;
	    if ( c1 < c2 )
		cd = 1;
	    else
		cd = -1;
		
	    bOK = true;
	    for ( int c = c1 + cd; c != c2; c += cd ) {
		if ( Brett[ r1 ][ c ] != -1 ) {
		    bOK = false;
		    break;
		}
	    }
	}

	return bOK;
    }

    boolean pruefeZugDiagonal( int c1, int r1, int c2, int r2 ) {
	boolean bOK = false;
	int nPiece = Brett[ r1 ][ c1 ];
	int nPType = nPiece % 6;
	int ZerstoereFigur = Brett[ r2 ][ c2 ];
	int nDestPType = ZerstoereFigur % 6;

	if ( (c1 + r1) % 2 == 0 && (c2 + r2) % 2 == 0 ) {
	    if ( c1 + r1 == c2 + r2 ) {
		bOK = true;
	    }
	    else if ( c1 - r1 == c2 - r2 ) {
		bOK = true;
	    }
	}
	else if ( (c1 + r1) % 2 == 1 && (c2 + r2) % 2 == 1 ) {
	    if ( c1 + r1 == c2 + r2 ) {
		bOK = true;
	    }
	    else if ( c1 - r1 == c2 - r2 ) {
		bOK = true;
	    }
	}
	if ( bOK ) {
	    int cd;
	    if ( c1 < c2 )
		cd = 1;
	    else
		cd = -1;
	    int rd;
	    if ( r1 < r2 )
		rd = 1;
	    else
		rd = -1;

	    int r = r1 + rd;
	    int c = c1 + cd;
	    for ( ; c != c2; r += rd, c += cd ) {
		if ( Brett[ r ][ c ] != -1 ) {
		    bOK = false;
		    break;
		}
	    }
	}

	return bOK;
    }

    boolean pruefeZug( int c1, int r1, int c2, int r2 ) {
	if ( c1 == c2 && r1 == r2 )
	    return false;

	boolean bOK = false;
	int nPiece = Brett[ r1 ][ c1 ];
	int nPType = nPiece % 6;
	int ZerstoereFigur = Brett[ r2 ][ c2 ];
	int nDestPType = ZerstoereFigur % 6;

	switch ( nPType ) {
	case BauerS:
	    if ( nPiece < 6 ) {
		if ( c1 == c2 ) {
		    if ( r1 == r2 - 1 )	{
			if ( ZerstoereFigur == -1 )
			    bOK = true;
		    }
		    else if ( r1 == r2 - 2 && r1 == 1 ) {
			if ( Brett[ r2 - 1 ][ c1 ] == -1 )
			    bOK = true;
		    }
		}
		else if ( c1 == c2 + 1 || c1 == c2 - 1 ) {
		    if ( r1 == r2 - 1 )	{
			if ( ZerstoereFigur != -1 && ZerstoereFigur > 5 )
			    bOK = true;
		    }
		}
	    }
	    else {
		if ( c1 == c2 ) {
		    if ( r1 == r2 + 1 )	{
			if ( ZerstoereFigur == -1 )
			    bOK = true;
		    }
		    else if ( r1 == r2 + 2 && r1 == 6 ) {
			if ( Brett[ r2 + 1 ][ c1 ] == -1 )
			    bOK = true;
		    }
		}
		else if ( c1 == c2 + 1 || c1 == c2 - 1 ) {
		    if ( r1 == r2 + 1 )	{
			if ( ZerstoereFigur != -1 && ZerstoereFigur < 6 )
			    bOK = true;
		    }
		}
	    }
	    break;
	case TurmS:
	    bOK = pruefeZugGerade( c1, r1, c2, r2 );
	    break;
	case SpringerS:
	    if ( r1 == r2 - 2 || r1 == r2 + 2 ) {
		if ( c1 == c2 - 1 || c1 == c2 + 1 ) {
		    bOK = true;
		}
	    }
	    else if ( c1 == c2 - 2 || c1 == c2 + 2 ) {
		if ( r1 == r2 - 1 || r1 == r2 + 1 ) {
		    bOK = true;
		}
	    }
	    break;
	case LaeuferS:
	    bOK = pruefeZugDiagonal( c1, r1, c2, r2 );
	    break;
	case DameS:
	    bOK = pruefeZugGerade( c1, r1, c2, r2 );
	    if ( bOK == false )
		bOK = pruefeZugDiagonal( c1, r1, c2, r2 );
	    break;
	case KoenigS:
	    if ( Math.abs( r1 - r2 ) < 2
		 && Math.abs( c1 - c2 ) < 2
		 && (Math.abs( r1 - r2 ) != 0
		     || Math.abs( c1 - c2 ) != 0) )
		bOK = true;
	    break;
	default:
	    break;
	}

	if ( bOK == true ) {
	    if ( nPiece < 6 && (ZerstoereFigur == -1 || ZerstoereFigur > 5) )
		bOK = true;
	    else if ( nPiece > 5 && (ZerstoereFigur == -1 || ZerstoereFigur < 6) )
		bOK = true;
	    else
		bOK = false;
	}

	return bOK;
    }

    public void mouseReleased( MouseEvent e ) {
    }

    public void mousePressed( MouseEvent e ) {
    }

    public void mouseClicked( MouseEvent e ) {
	if ( AktiveFigur[0] >= 0 ) {
	    int x = e.getX();
	    int y = e.getY();

	    //Finde die Spalte und Reihe heraus
	    Dimension d = getSize();
	    int c = (int)((x * 8) / d.width);
	    int r = (int)((y * 8) / d.height);
	    if ( c < 0 || c > 7 )
		return;
	    if ( r < 0 || r > 7 )
		return;

	    if ( pruefeZug( AktiveFigur[0], AktiveFigur[1], c, r ) ) {
		Brett[ r ][ c ] = Brett[ AktiveFigur[1] ][ AktiveFigur[0] ];
		Brett[ AktiveFigur[1] ][ AktiveFigur[0] ] = -1;
		nPlayer = (nPlayer + 1) % 2;
	    }

	    AktiveFigur[0] = -1;
	    AktiveFigur[1] = -1;
	}
	else {
	    int x = e.getX();
	    int y = e.getY();

	    //Finde die Spalte und Reihe heraus
	    Dimension d = getSize();
	    int c = (int)((x * 8) / d.width);
	    int r = (int)((y * 8) / d.height);
	    if ( c < 0 || c > 7 )
		return;
	    if ( r < 0 || r > 7 )
		return;

	    // Prüfe, ob da was liegt
	    // Wenn ja, mache daraus ein aktives Feld
	    if ( Brett[ r ][ c ] != -1 ) {
		// Prüfe, welcher Spieler dran ist
		if ( (Brett[ r ][ c ] < 6 && nPlayer == 0)
		     || (Brett[ r ][ c ] > 5 && nPlayer == 1)
		     ) {
		    AktiveFigur[0] = c;
		    AktiveFigur[1] = r;
		}
	    }
	}

	repaint();
    }

    public void mouseEntered( MouseEvent e ) {
    }

    public void mouseExited( MouseEvent e ) {
    }
}

Und so hab ich angefangen mit dem Menü
Jetzt will ich halt, dass das Menü und das Applet in einem JFrame ist

Code:
public class Schach extends JFrame implements MouseListener, ActionListener
{

	JFrame applikation;
	Container container;

	// Menüleiste
	JMenuBar menueLeiste;

	// Menüleiste Elemente
	JMenu datei;
	JMenu hilfe;

	// Datei
	JMenuItem neuesSpiel;
	JMenuItem beenden;

	// Hilfe
	JMenuItem anleitung;
	JMenuItem spielregeln;
	JTextArea textarea;
	Image   Bild[];


	public Schach() {
		applikation = new JFrame("Schach");
		container = applikation.getContentPane();

		// Menüleiste erzeugen
		menueLeiste = new JMenuBar();

		// Menüelemente erzeugen
		datei = new JMenu("Datei");
		hilfe = new JMenu("Hilfe");

		// Untermenüelemente erzeugen
		neuesSpiel = new JMenuItem("Neues Spiel");
		neuesSpiel.addActionListener(this);
		beenden = new JMenuItem("Beenden");
		beenden.addActionListener(this);
		anleitung = new JMenuItem("Anleitung");
		anleitung.addActionListener(this);
		spielregeln = new JMenuItem("Spielregeln");
		spielregeln.addActionListener(this);

		// Menüelemente hinzufügen
		menueLeiste.add(datei);
		menueLeiste.add(hilfe);

		// Untermenüelemente hinzufügen
		datei.add(neuesSpiel);
		datei.add(beenden);
		hilfe.add(anleitung);
		hilfe.add(spielregeln);

Wenn ich "public class Schach extends JFrame" statt Applet schreibe dann bringt er mir Fehler bei getCodeBase() bei public void init

Vielen Dank im Voraus
 
Moin,

habe keine Ahnung was "getCodeBase()" ist oder macht, aber ich hole meine Bilder immer :
Code:
Image myImage = Toolkit.getDefaultToolkit().getImage(strImage) ;
wobei "strImage" die URL ist, da der das Bild liegt ...

EDIT: das müsste es auch analog für Dateipfade geben!

Gruß
Klaus
 
Sers!

So... wo soll man denn da anfangen?! Ich weiß gar nicht warum ich mir das um 1 nachts noch antuh! :suspekt:

Ich habe die mal den Code zammengestellt. Also bei mir läuft es! Bei Problemen einfach nochma posten!!

Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class Schach extends JPanel implements MouseListener, ActionListener {

	private Image Bild[];

	static final int Schwarz = 0;
	static final int Weiß = 1;

	static final int Leer = -1;
	static final int BauerS = 0;
	static final int TurmS = 1;
	static final int SpringerS = 2;
	static final int LaeuferS = 3;
	static final int DameS = 4;
	static final int KoenigS = 5;
	static final int BauerW = 6;
	static final int TurmW = 7;
	static final int SpringerW = 8;
	static final int LaeuferW = 9;
	static final int DameW = 10;
	static final int KoenigW = 11;

	int Brett[][];

	int AktiveFigur[] = { -1, -1 };

	int nPlayer = Weiß;

	JFrame applikation;
	Container container;

	// Menüleiste
	JMenuBar menueLeiste;

	// Menüleiste Elemente
	JMenu datei;
	JMenu hilfe;

	// Datei
	JMenuItem neuesSpiel;
	JMenuItem beenden;

	// Hilfe
	JMenuItem anleitung;
	JMenuItem spielregeln;
	JTextArea textarea;

	private Image offScrImage;

	public Schach() {

		applikation = new JFrame("Schach");
		container = applikation.getContentPane();

		// Menüleiste erzeugen
		menueLeiste = new JMenuBar();

		// Menüelemente erzeugen
		datei = new JMenu("Datei");
		hilfe = new JMenu("Hilfe");

		// Untermenüelemente erzeugen
		neuesSpiel = new JMenuItem("Neues Spiel");
		neuesSpiel.addActionListener(this);
		beenden = new JMenuItem("Beenden");
		beenden.addActionListener(this);
		anleitung = new JMenuItem("Anleitung");
		anleitung.addActionListener(this);
		spielregeln = new JMenuItem("Spielregeln");
		spielregeln.addActionListener(this);

		// Menüelemente hinzufügen
		menueLeiste.add(datei);
		menueLeiste.add(hilfe);

		// Untermenüelemente hinzufügen
		datei.add(neuesSpiel);
		datei.add(beenden);
		hilfe.add(anleitung);
		hilfe.add(spielregeln);

		                    // NEW
		                    applikation.setJMenuBar(menueLeiste);
		                    init();
                                   applikation.setSize(new Dimension(600, 600));
		                   applikation.add(this);
		                   applikation.setVisible(true);

	}
        
        // NEW
        // Bilder werden mit dem Toolkit erzeugt!!
	public void init() {
		Bild = new Image[12];
		Bild[BauerS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images\\BauerS.gif")));
		Bild[TurmS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/TurmS.gif")));
		Bild[SpringerS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/SpringerS.gif")));
		Bild[LaeuferS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/LaeuferS.gif")));
		Bild[DameS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/DameS.gif")));
		Bild[KoenigS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/KoenigS.gif")));
		Bild[BauerW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/BauerW.gif")));
		Bild[TurmW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/TurmW.gif")));
		Bild[SpringerW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("mages/SpringerW.gif")));
		Bild[LaeuferW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/LaeuferW.gif")));
		Bild[DameW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/DameW.gif")));
		Bild[KoenigW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("images/KoenigW.gif")));

		// Erstelle Brett
		Brett = new int[8][8];

		for (int i = 0; i < 8; ++i)
			for (int j = 0; j < 8; ++j)
				Brett[i][j] = Leer;

		Brett[0][0] = TurmS;
		Brett[0][1] = SpringerS;
		Brett[0][2] = LaeuferS;
		Brett[0][4] = DameS;
		Brett[0][3] = KoenigS;
		Brett[0][5] = LaeuferS;
		Brett[0][6] = SpringerS;
		Brett[0][7] = TurmS;
		Brett[1][0] = BauerS;
		Brett[1][1] = BauerS;
		Brett[1][2] = BauerS;
		Brett[1][3] = BauerS;
		Brett[1][4] = BauerS;
		Brett[1][5] = BauerS;
		Brett[1][6] = BauerS;
		Brett[1][7] = BauerS;

		Brett[7][0] = TurmW;
		Brett[7][1] = SpringerW;
		Brett[7][2] = LaeuferW;
		Brett[7][4] = DameW;
		Brett[7][3] = KoenigW;
		Brett[7][5] = LaeuferW;
		Brett[7][6] = SpringerW;
		Brett[7][7] = TurmW;
		Brett[6][0] = BauerW;
		Brett[6][1] = BauerW;
		Brett[6][2] = BauerW;
		Brett[6][3] = BauerW;
		Brett[6][4] = BauerW;
		Brett[6][5] = BauerW;
		Brett[6][6] = BauerW;
		Brett[6][7] = BauerW;

		addMouseListener(this);
	}

	// NEW
	// aus paint(Graphics g) wird paintComponent(Graphics g)!!
	public void paintComponent(Graphics g) {
		Dimension d = getSize();

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

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

		/*
		 * Zeichnet Muster der schwarzen/weißen Quadrate, je nachdem, ob der
		 * Spieler schwarz oder weiß ist
		 */
		for (int c = 0; c < 8; ++c) {
			for (int r = 0; r < 8; ++r) {
				if ((c + r) % 2 == 0) {
					og.setColor(Color.gray);
				} else {
					og.setColor(Color.white);
				}
				og.fillRect(xoff * c, yoff * r, xoff, yoff);

				/* Zeichne jedes Bild auf Brett */

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

		/* Zeichne Markierung um die aktive Spielfigur */
		if (AktiveFigur[0] >= 0) {
			if (nPlayer == Weiß)
				og.setColor(Color.red);
			else
				og.setColor(Color.blue);

			og.drawRect(xoff * AktiveFigur[0], yoff * AktiveFigur[1], xoff,
					yoff);
			og.drawRect(xoff * AktiveFigur[0] - 1, yoff * AktiveFigur[1] - 1,
					xoff + 2, yoff + 2);
		}

		g.drawImage(offScrImage, 0, 0, this.getWidth(), this.getHeight(), this);

	}

	/**
	 * Falls ein Layout-Manager eingesetzt wird, die bevorzugte Größe
	 * zurückliefern
	 */
	public Dimension getPreferredSize() {
		return new Dimension(offScrImage.getWidth(this), offScrImage
				.getHeight(this));
	}

	boolean pruefeZugGerade(int c1, int r1, int c2, int r2) {
		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		if (c1 == c2 && r1 != r2) {
			int rd;
			if (r1 < r2)
				rd = 1;
			else
				rd = -1;

			bOK = true;
			for (int r = r1 + rd; r != r2; r += rd) {
				if (Brett[r][c1] != -1) {
					bOK = false;
					break;
				}
			}
		} else if (r1 == r2 && c1 != c2) {
			int cd;
			if (c1 < c2)
				cd = 1;
			else
				cd = -1;

			bOK = true;
			for (int c = c1 + cd; c != c2; c += cd) {
				if (Brett[r1][ c] != -1) {
					bOK = false;
					break;
				}
			}
		}

		return bOK;
	}

	boolean pruefeZugDiagonal(int c1, int r1, int c2, int r2) {
		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		if ((c1 + r1) % 2 == 0 && (c2 + r2) % 2 == 0) {
			if (c1 + r1 == c2 + r2) {
				bOK = true;
			} else if (c1 - r1 == c2 - r2) {
				bOK = true;
			}
		} else if ((c1 + r1) % 2 == 1 && (c2 + r2) % 2 == 1) {
			if (c1 + r1 == c2 + r2) {
				bOK = true;
			} else if (c1 - r1 == c2 - r2) {
				bOK = true;
			}
		}
		if (bOK) {
			int cd;
			if (c1 < c2)
				cd = 1;
			else
				cd = -1;
			int rd;
			if (r1 < r2)
				rd = 1;
			else
				rd = -1;

			int r = r1 + rd;
			int c = c1 + cd;
			for (; c != c2; r += rd, c += cd) {
				if (Brett[r][ c] != -1) {
					bOK = false;
					break;
				}
			}
		}

		return bOK;
	}

	boolean pruefeZug(int c1, int r1, int c2, int r2) {
		if (c1 == c2 && r1 == r2)
			return false;

		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		switch (nPType) {
		case BauerS:
			if (nPiece < 6) {
				if (c1 == c2) {
					if (r1 == r2 - 1) {
						if (ZerstoereFigur == -1)
							bOK = true;
					} else if (r1 == r2 - 2 && r1 == 1) {
						if (Brett[r2 - 1][c1] == -1)
							bOK = true;
					}
				} else if (c1 == c2 + 1 || c1 == c2 - 1) {
					if (r1 == r2 - 1) {
						if (ZerstoereFigur != -1 && ZerstoereFigur > 5)
							bOK = true;
					}
				}
			} else {
				if (c1 == c2) {
					if (r1 == r2 + 1) {
						if (ZerstoereFigur == -1)
							bOK = true;
					} else if (r1 == r2 + 2 && r1 == 6) {
						if (Brett[r2 + 1][c1] == -1)
							bOK = true;
					}
				} else if (c1 == c2 + 1 || c1 == c2 - 1) {
					if (r1 == r2 + 1) {
						if (ZerstoereFigur != -1 && ZerstoereFigur < 6)
							bOK = true;
					}
				}
			}
			break;
		case TurmS:
			bOK = pruefeZugGerade(c1, r1, c2, r2);
			break;
		case SpringerS:
			if (r1 == r2 - 2 || r1 == r2 + 2) {
				if (c1 == c2 - 1 || c1 == c2 + 1) {
					bOK = true;
				}
			} else if (c1 == c2 - 2 || c1 == c2 + 2) {
				if (r1 == r2 - 1 || r1 == r2 + 1) {
					bOK = true;
				}
			}
			break;
		case LaeuferS:
			bOK = pruefeZugDiagonal(c1, r1, c2, r2);
			break;
		case DameS:
			bOK = pruefeZugGerade(c1, r1, c2, r2);
			if (bOK == false)
				bOK = pruefeZugDiagonal(c1, r1, c2, r2);
			break;
		case KoenigS:
			if (Math.abs(r1 - r2) < 2 && Math.abs(c1 - c2) < 2
					&& (Math.abs(r1 - r2) != 0 || Math.abs(c1 - c2) != 0))
				bOK = true;
			break;
		default:
			break;
		}

		if (bOK == true) {
			if (nPiece < 6 && (ZerstoereFigur == -1 || ZerstoereFigur > 5))
				bOK = true;
			else if (nPiece > 5 && (ZerstoereFigur == -1 || ZerstoereFigur < 6))
				bOK = true;
			else
				bOK = false;
		}

		return bOK;
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		if (AktiveFigur[0] >= 0) {
			int x = e.getX();
			int y = e.getY();

			// Finde die Spalte und Reihe heraus
			Dimension d = getSize();
			int c = (int) ((x * 8) / d.width);
			int r = (int) ((y * 8) / d.height);
			if (c < 0 || c > 7)
				return;
			if (r < 0 || r > 7)
				return;

			if (pruefeZug(AktiveFigur[0], AktiveFigur[1], c, r)) {
				Brett[r][ c] = Brett[AktiveFigur[1]][AktiveFigur[0]];
				Brett[AktiveFigur[1]][AktiveFigur[0]] = -1;
				nPlayer = (nPlayer + 1) % 2;
			}

			AktiveFigur[0] = -1;
			AktiveFigur[1] = -1;
		} else {
			int x = e.getX();
			int y = e.getY();

			// Finde die Spalte und Reihe heraus
			Dimension d = getSize();
			int c = (int) ((x * 8) / d.width);
			int r = (int) ((y * 8) / d.height);
			if (c < 0 || c > 7)
				return;
			if (r < 0 || r > 7)
				return;

			// Prüfe, ob da was liegt
			// Wenn ja, mache daraus ein aktives Feld
			if (Brett[r][ c] != -1) {
				// Prüfe, welcher Spieler dran ist
				if ((Brett[r][ c] < 6 && nPlayer == 0)
						|| (Brett[r][ c] > 5 && nPlayer == 1)) {
					AktiveFigur[0] = c;
					AktiveFigur[1] = r;
				}
			}
		}

		repaint();
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub

	}

	public static void main(String[] args) {
		new Schach();
	}

Änderungen hab ich mit //NEW markiert!

Wofür eigentlich der ActionListener, du benutzt ihn garnicht!
 
Super, danke erstmal...
nur bei diesem @override zeigt er mir immer einen Fehler an...woran könnte das liegen? Hab jetzt auf JRE6 aktualisiert und ein neues Projekt gemacht, aber er schreibt
...must override a superclass method...
 
Moin,

so ganz auf die Schnelle:
Du solltest du Mouse- und ActionEvents auch mittels eines Mouse- und ActionListeners irgendeinem Objekt hinzufügen

Vorher soll sonst klar sein, bei welchem bspw. MouseClick das Event oder die Aktion ziehen soll ? :confused:

Gruß
Klaus
 
Zuletzt bearbeitet:
So...nochmal meiner aktueller Code

Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class Schach extends JPanel implements MouseListener, ActionListener {

	private Image Bild[];

	static final int Schwarz = 0;
	static final int Weiß = 1;

	static final int Leer = -1;
	static final int BauerS = 0;
	static final int TurmS = 1;
	static final int SpringerS = 2;
	static final int LaeuferS = 3;
	static final int DameS = 4;
	static final int KoenigS = 5;
	static final int BauerW = 6;
	static final int TurmW = 7;
	static final int SpringerW = 8;
	static final int LaeuferW = 9;
	static final int DameW = 10;
	static final int KoenigW = 11;

	int Brett[][];

	int AktiveFigur[] = { -1, -1 };

	int nPlayer = Weiß;

	JFrame applikation;
	Container container;

	// Menüleiste
	JMenuBar menueLeiste;

	// Menüleiste Elemente
	JMenu datei;
	JMenu spielmodus;
	JMenu hilfe;


	// Datei
	JMenuItem neuesSpiel;
	JMenuItem beenden;

	// Spielmodus
	JMenuItem vsMensch;
	JMenuItem vsComputer;

	// Hilfe
	JMenuItem anleitung;
	JMenuItem spielregeln;


	JTextArea textarea;




	private Image offScrImage;

	public Schach() {

		applikation = new JFrame("Schach");
		container = applikation.getContentPane();

		// Menüleiste erzeugen
		menueLeiste = new JMenuBar();

		// Menüelemente erzeugen
		datei = new JMenu("Datei");
		spielmodus = new JMenu("Spielmodus");
		hilfe = new JMenu("Hilfe");


		// Untermenüelemente erzeugen
		neuesSpiel = new JMenuItem("Neues Spiel");
		neuesSpiel.addActionListener(this);
		beenden = new JMenuItem("Beenden");
		beenden.addActionListener(this);
		anleitung = new JMenuItem("Anleitung");
		anleitung.addActionListener(this);
		spielregeln = new JMenuItem("Spielregeln");
		spielregeln.addActionListener(this);
		vsComputer = new JMenuItem("vs. Computer");
		vsComputer.addActionListener(this);
		vsMensch = new JMenuItem("vs. Mensch");
		vsMensch.addActionListener(this);


		// Menüelemente hinzufügen
		menueLeiste.add(datei);
		menueLeiste.add(hilfe);
		menueLeiste.add(spielmodus);

		// Untermenüelemente hinzufügen
		datei.add(neuesSpiel);
		datei.add(beenden);
		hilfe.add(anleitung);
		hilfe.add(spielregeln);
		spielmodus.add(vsMensch);
		spielmodus.add(vsComputer);

		// NEW
		applikation.setJMenuBar(menueLeiste);
		init();
		applikation.setSize(new Dimension(600, 600));
		applikation.add(this);
		applikation.setVisible(true);

	}

	// NEW
	// Bilder werden mit dem Toolkit erzeugt!!
	public void init() {
		Bild = new Image[12];
		Bild[BauerS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/BauerS.gif")));
		Bild[TurmS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/TurmS.gif")));
		Bild[SpringerS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/SpringerS.gif")));
		Bild[LaeuferS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/LaeuferS.gif")));
		Bild[DameS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/DameS.gif")));
		Bild[KoenigS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/KoenigS.gif")));
		Bild[BauerW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/BauerW.gif")));
		Bild[TurmW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/TurmW.gif")));
		Bild[SpringerW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/SpringerW.gif")));
		Bild[LaeuferW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/LaeuferW.gif")));
		Bild[DameW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/DameW.gif")));
		Bild[KoenigW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/KoenigW.gif")));

		// Erstelle Brett
		Brett = new int[8][8];

		for (int i = 0; i < 8; ++i)
			for (int j = 0; j < 8; ++j)
				Brett[i][j] = Leer;

		Brett[0][0] = TurmS;
		Brett[0][1] = SpringerS;
		Brett[0][2] = LaeuferS;
		Brett[0][4] = DameS;
		Brett[0][3] = KoenigS;
		Brett[0][5] = LaeuferS;
		Brett[0][6] = SpringerS;
		Brett[0][7] = TurmS;
		Brett[1][0] = BauerS;
		Brett[1][1] = BauerS;
		Brett[1][2] = BauerS;
		Brett[1][3] = BauerS;
		Brett[1][4] = BauerS;
		Brett[1][5] = BauerS;
		Brett[1][6] = BauerS;
		Brett[1][7] = BauerS;

		Brett[7][0] = TurmW;
		Brett[7][1] = SpringerW;
		Brett[7][2] = LaeuferW;
		Brett[7][4] = DameW;
		Brett[7][3] = KoenigW;
		Brett[7][5] = LaeuferW;
		Brett[7][6] = SpringerW;
		Brett[7][7] = TurmW;
		Brett[6][0] = BauerW;
		Brett[6][1] = BauerW;
		Brett[6][2] = BauerW;
		Brett[6][3] = BauerW;
		Brett[6][4] = BauerW;
		Brett[6][5] = BauerW;
		Brett[6][6] = BauerW;
		Brett[6][7] = BauerW;

		addMouseListener(this);
	}

	// NEW
	// aus paint(Graphics g) wird paintComponent(Graphics g)!!
	public void paintComponent(Graphics g) {
		Dimension d = getSize();

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

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

		/*
		 * Zeichnet Muster der schwarzen/weißen Quadrate, je nachdem, ob der
		 * Spieler schwarz oder weiß ist
		 */
		for (int c = 0; c < 8; ++c) {
			for (int r = 0; r < 8; ++r) {
				if ((c + r) % 2 == 0) {
					og.setColor(Color.gray);
				} else {
					og.setColor(Color.white);
				}
				og.fillRect(xoff * c, yoff * r, xoff, yoff);

				/* Zeichne jedes Bild auf Brett */

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

		/* Zeichne Markierung um die aktive Spielfigur */
		if (AktiveFigur[0] >= 0) {
			if (nPlayer == Weiß)
				og.setColor(Color.red);
			else
				og.setColor(Color.blue);

			og.drawRect(xoff * AktiveFigur[0], yoff * AktiveFigur[1], xoff,
					yoff);
			og.drawRect(xoff * AktiveFigur[0] - 1, yoff * AktiveFigur[1] - 1,
					xoff + 2, yoff + 2);
		}

		g.drawImage(offScrImage, 0, 0, this.getWidth(), this.getHeight(), this);

	}

	/**
	 * Falls ein Layout-Manager eingesetzt wird, die bevorzugte Größe
	 * zurückliefern
	 */
	public Dimension getPreferredSize() {
		return new Dimension(offScrImage.getWidth(this), offScrImage
				.getHeight(this));
	}

	boolean pruefeZugGerade(int c1, int r1, int c2, int r2) {
		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		if (c1 == c2 && r1 != r2) {
			int rd;
			if (r1 < r2)
				rd = 1;
			else
				rd = -1;

			bOK = true;
			for (int r = r1 + rd; r != r2; r += rd) {
				if (Brett[r][c1] != -1) {
					bOK = false;
					break;
				}
			}
		} else if (r1 == r2 && c1 != c2) {
			int cd;
			if (c1 < c2)
				cd = 1;
			else
				cd = -1;

			bOK = true;
			for (int c = c1 + cd; c != c2; c += cd) {
				if (Brett[r1][ c] != -1) {
					bOK = false;
					break;
				}
			}
		}

		return bOK;
	}

	boolean pruefeZugDiagonal(int c1, int r1, int c2, int r2) {
		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		if ((c1 + r1) % 2 == 0 && (c2 + r2) % 2 == 0) {
			if (c1 + r1 == c2 + r2) {
				bOK = true;
			} else if (c1 - r1 == c2 - r2) {
				bOK = true;
			}
		} else if ((c1 + r1) % 2 == 1 && (c2 + r2) % 2 == 1) {
			if (c1 + r1 == c2 + r2) {
				bOK = true;
			} else if (c1 - r1 == c2 - r2) {
				bOK = true;
			}
		}
		if (bOK) {
			int cd;
			if (c1 < c2)
				cd = 1;
			else
				cd = -1;
			int rd;
			if (r1 < r2)
				rd = 1;
			else
				rd = -1;

			int r = r1 + rd;
			int c = c1 + cd;
			for (; c != c2; r += rd, c += cd) {
				if (Brett[r][ c] != -1) {
					bOK = false;
					break;
				}
			}
		}

		return bOK;
	}

	boolean pruefeZug(int c1, int r1, int c2, int r2) {
		if (c1 == c2 && r1 == r2)
			return false;

		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		switch (nPType) {
		case BauerS:
			if (nPiece < 6) {
				if (c1 == c2) {
					if (r1 == r2 - 1) {
						if (ZerstoereFigur == -1)
							bOK = true;
					} else if (r1 == r2 - 2 && r1 == 1) {
						if (Brett[r2 - 1][c1] == -1)
							bOK = true;
					}
				} else if (c1 == c2 + 1 || c1 == c2 - 1) {
					if (r1 == r2 - 1) {
						if (ZerstoereFigur != -1 && ZerstoereFigur > 5)
							bOK = true;
					}
				}
			} else {
				if (c1 == c2) {
					if (r1 == r2 + 1) {
						if (ZerstoereFigur == -1)
							bOK = true;
					} else if (r1 == r2 + 2 && r1 == 6) {
						if (Brett[r2 + 1][c1] == -1)
							bOK = true;
					}
				} else if (c1 == c2 + 1 || c1 == c2 - 1) {
					if (r1 == r2 + 1) {
						if (ZerstoereFigur != -1 && ZerstoereFigur < 6)
							bOK = true;
					}
				}
			}
			break;
		case TurmS:
			bOK = pruefeZugGerade(c1, r1, c2, r2);
			break;
		case SpringerS:
			if (r1 == r2 - 2 || r1 == r2 + 2) {
				if (c1 == c2 - 1 || c1 == c2 + 1) {
					bOK = true;
				}
			} else if (c1 == c2 - 2 || c1 == c2 + 2) {
				if (r1 == r2 - 1 || r1 == r2 + 1) {
					bOK = true;
				}
			}
			break;
		case LaeuferS:
			bOK = pruefeZugDiagonal(c1, r1, c2, r2);
			break;
		case DameS:
			bOK = pruefeZugGerade(c1, r1, c2, r2);
			if (bOK == false)
				bOK = pruefeZugDiagonal(c1, r1, c2, r2);
			break;
		case KoenigS:
			if (Math.abs(r1 - r2) < 2 && Math.abs(c1 - c2) < 2
					&& (Math.abs(r1 - r2) != 0 || Math.abs(c1 - c2) != 0))
				bOK = true;
			break;
		default:
			break;
		}

		if (bOK == true) {
			if (nPiece < 6 && (ZerstoereFigur == -1 || ZerstoereFigur > 5))
				bOK = true;
			else if (nPiece > 5 && (ZerstoereFigur == -1 || ZerstoereFigur < 6))
				bOK = true;
			else
				bOK = false;
		}

		return bOK;
	}


	public void mouseClicked(MouseEvent e) {
		if (AktiveFigur[0] >= 0) {
			int x = e.getX();
			int y = e.getY();

			// Finde die Spalte und Reihe heraus
			Dimension d = getSize();
			int c = (int) ((x * 8) / d.width);
			int r = (int) ((y * 8) / d.height);
			if (c < 0 || c > 7)
				return;
			if (r < 0 || r > 7)
				return;

			if (pruefeZug(AktiveFigur[0], AktiveFigur[1], c, r)) {
				Brett[r][ c] = Brett[AktiveFigur[1]][AktiveFigur[0]];
				Brett[AktiveFigur[1]][AktiveFigur[0]] = -1;
				nPlayer = (nPlayer + 1) % 2;
			}

			AktiveFigur[0] = -1;
			AktiveFigur[1] = -1;
		} else {
			int x = e.getX();
			int y = e.getY();

			// Finde die Spalte und Reihe heraus
			Dimension d = getSize();
			int c = (int) ((x * 8) / d.width);
			int r = (int) ((y * 8) / d.height);
			if (c < 0 || c > 7)
				return;
			if (r < 0 || r > 7)
				return;

			// Prüfe, ob da was liegt
			// Wenn ja, mache daraus ein aktives Feld
			if (Brett[r][ c] != -1) {
				// Prüfe, welcher Spieler dran ist
				if ((Brett[r][ c] < 6 && nPlayer == 0)
						|| (Brett[r][ c] > 5 && nPlayer == 1)) {
					AktiveFigur[0] = c;
					AktiveFigur[1] = r;
				}
			}
		}

		repaint();
	}



	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}


	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}


	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub

	}


	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}


	public void actionPerformed(ActionEvent e) {
		
		if (e.getSource() == neuesSpiel){
			applikation.getContentPane().repaint();
		}
		if (e.getSource() == beenden){
			System.exit(0);
		}
		if (e.getSource() == anleitung){
			System.out.println("Anleitung wurde angeklickt");
		}
		if (e.getSource() == spielregeln){	

			System.out.println("Spielregeln wurde angeklickt");
		}

		if (e.getSource() == vsMensch){	

			System.out.println("vsMensch wurde angeklickt");
		}
		
		if (e.getSource() == vsComputer){	

			System.out.println("vsComputer wurde angeklickt");
		}



	}


	public static void main(String[] args) {
		new Schach();
	}
}


Und meine 2 Fragen:

- Wie kann ich das JFrame komplett neu laden...wenn ich auf "neues Spiel" klicke?
applikation.getContentPane().repaint(); funktioniert nicht

-Ich möchte, wenn ich zum Beispiel auf "Regeln" klicke, dass ein Widget(welches ist am besten geeignet? TextPane?) erscheint. Darin sollen die Regeln stehen.
Um den Code aber nicht so lang zu machen, möchte ich den Text von woanders bekommen(Pfad oder andere Klasse), wie kann ich das am besten machen?
 
Sers!

Zur ersten Frage: application.validate();

Und zur zweiten Frage würde ich den text in eine txt-Datei schreiben und dann einlesen.
Beispiel:
Code:
public static String readTextFile(String fileName) {
      String result = null;

      try {
         InputStreamReader reader;

         reader = new InputStreamReader(new FileInputStream(fileName));

         BufferedReader in = new BufferedReader(reader);  
         StringBuilder buffer = new StringBuilder();
         int  c;

         while((c = in.read()) >= 0) {
           buffer.append((char) c);
         }

         in.close();
         return buffer.toString();

      } catch(Exception e) {
         e.printStackTrace();
         result = null;
      }

      return result; 
   }

So nun mal eine Frage von mir. Das sind eigentlich alles Basics,die du benötigst. Meinst du nicht, du solltest dich vielleicht ein wenig einlesen in die Thematik?:( Sonst schreiben immer andere für dich die Codes!
 
So...ich hab das jetzt die Spielregeln.txt im Projektordner eingebunden(ziemlich am Anfang).

Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Schach extends JPanel implements MouseListener, ActionListener {

	private Image Bild[];

	static final int Schwarz = 0;
	static final int Weiß = 1;

	static final int Leer = -1;
	static final int BauerS = 0;
	static final int TurmS = 1;
	static final int SpringerS = 2;
	static final int LaeuferS = 3;
	static final int DameS = 4;
	static final int KoenigS = 5;
	static final int BauerW = 6;
	static final int TurmW = 7;
	static final int SpringerW = 8;
	static final int LaeuferW = 9;
	static final int DameW = 10;
	static final int KoenigW = 11;

	int Brett[][];

	int AktiveFigur[] = { -1, -1 };

	// Welcher Spieler soll beginnen?
	int nPlayer = Weiß;


	JFrame applikation;
	Container container;

	// Menüleiste
	JMenuBar menueLeiste;

	// Menüleiste Elemente
	JMenu datei;
	JMenu spielmodus;
	JMenu hilfe;


	// Datei
	JMenuItem neuesSpiel;
	JMenuItem beenden;

	// Spielmodus
	JMenuItem vsMensch;
	JMenuItem vsComputer;

	// Hilfe
	JMenuItem anleitung;
	JMenuItem spielregeln;
	
	JTextArea textArea = new JTextArea();

	

	private Image offScrImage;

	public Schach() {

     
        JTextArea textArea = new JTextArea();
        try {
            textArea.read(new FileReader("C:/Dokumente und Einstellungen/fschwarz/Desktop/Projekt/Schachregeln.txt"), "");
        } catch (Exception e) {
            e.printStackTrace();
        }
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setPreferredSize(new Dimension(320, 240));
        add(scrollPane);
        pack();
        
        scrollPane.setVisible(false);
        textArea.setVisible(false);
    

		
		applikation = new JFrame("Schach");
		container = applikation.getContentPane();

		// Menüleiste erzeugen
		menueLeiste = new JMenuBar();

		// Menüelemente erzeugen
		datei = new JMenu("Datei");
		spielmodus = new JMenu("Spielmodus");
		hilfe = new JMenu("Hilfe");


		// Untermenüelemente erzeugen
		neuesSpiel = new JMenuItem("Neues Spiel");
		neuesSpiel.addActionListener(this);
		beenden = new JMenuItem("Beenden");
		beenden.addActionListener(this);
		anleitung = new JMenuItem("Anleitung");
		anleitung.addActionListener(this);
		spielregeln = new JMenuItem("Spielregeln");
		spielregeln.addActionListener(this);
		vsComputer = new JMenuItem("vs. Computer");
		vsComputer.addActionListener(this);
		vsMensch = new JMenuItem("vs. Mensch");
		vsMensch.addActionListener(this);
		
		
		// Menüelemente hinzufügen
		menueLeiste.add(datei);
		menueLeiste.add(hilfe);
		menueLeiste.add(spielmodus);
		
		// Untermenüelemente hinzufügen
		datei.add(neuesSpiel);
		datei.add(beenden);
		hilfe.add(anleitung);
		hilfe.add(spielregeln);
		spielmodus.add(vsMensch);
		spielmodus.add(vsComputer);

		// NEW
		applikation.setJMenuBar(menueLeiste);
		init();
		applikation.setSize(new Dimension(600, 600));
		applikation.add(this);
		applikation.setVisible(true);

	}



	private void pack() {
		// TODO Auto-generated method stub
		
	}



	// NEW
	// Bilder werden mit dem Toolkit erzeugt!!
	public void init() {
		Bild = new Image[12];
		Bild[BauerS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/BauerS.gif")));
		Bild[TurmS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/TurmS.gif")));
		Bild[SpringerS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/SpringerS.gif")));
		Bild[LaeuferS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/LaeuferS.gif")));
		Bild[DameS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/DameS.gif")));
		Bild[KoenigS] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/KoenigS.gif")));
		Bild[BauerW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/BauerW.gif")));
		Bild[TurmW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/TurmW.gif")));
		Bild[SpringerW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/SpringerW.gif")));
		Bild[LaeuferW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/LaeuferW.gif")));
		Bild[DameW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/DameW.gif")));
		Bild[KoenigW] = Toolkit.getDefaultToolkit().getImage(
				(getClass().getResource("bilder/KoenigW.gif")));

		// Erstelle Brett mit 8 x 8 = 64 Feldern
		Brett = new int[8][8];

		for (int i = 0; i < 8; ++i)
			for (int j = 0; j < 8; ++j)
				// alle Felder sind am Anfang leer...
				Brett[i][j] = Leer;
		// bis auf:
		Brett[0][0] = TurmS; // schwarze Spielfiguren
		Brett[0][1] = SpringerS;
		Brett[0][2] = LaeuferS;
		Brett[0][4] = DameS;
		Brett[0][3] = KoenigS;
		Brett[0][5] = LaeuferS;
		Brett[0][6] = SpringerS;
		Brett[0][7] = TurmS;
		Brett[1][0] = BauerS;
		Brett[1][1] = BauerS;
		Brett[1][2] = BauerS;
		Brett[1][3] = BauerS;
		Brett[1][4] = BauerS;
		Brett[1][5] = BauerS;
		Brett[1][6] = BauerS;
		Brett[1][7] = BauerS;

		Brett[7][0] = TurmW; //weiße Spielfiguren
		Brett[7][1] = SpringerW;
		Brett[7][2] = LaeuferW;
		Brett[7][4] = DameW;
		Brett[7][3] = KoenigW;
		Brett[7][5] = LaeuferW;
		Brett[7][6] = SpringerW;
		Brett[7][7] = TurmW;
		Brett[6][0] = BauerW;
		Brett[6][1] = BauerW;
		Brett[6][2] = BauerW;
		Brett[6][3] = BauerW;
		Brett[6][4] = BauerW;
		Brett[6][5] = BauerW;
		Brett[6][6] = BauerW;
		Brett[6][7] = BauerW;

		addMouseListener(this);
	}

//
	public void paintComponent(Graphics g) {
		Dimension d = getSize();

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

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

		/*
		 * Zeichnet Muster der schwarzen/weißen Quadrate, je nachdem, ob der
		 * Spieler schwarz oder weiß ist
		 */
		for (int c = 0; c < 8; ++c) {
			for (int r = 0; r < 8; ++r) {
				if ((c + r) % 2 == 0) {
					og.setColor(Color.gray);
				} else {
					og.setColor(Color.white);
				}
				og.fillRect(xoff * c, yoff * r, xoff, yoff);

				/* Zeichne jedes Bild auf Brett */

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

		/* Zeichne Markierung um die aktive Spielfigur */
		if (AktiveFigur[0] >= 0) {
			if (nPlayer == Weiß)
				og.setColor(Color.red);
			else
				og.setColor(Color.blue);

			og.drawRect(xoff * AktiveFigur[0], yoff * AktiveFigur[1], xoff,
					yoff);
			og.drawRect(xoff * AktiveFigur[0] - 1, yoff * AktiveFigur[1] - 1,
					xoff + 2, yoff + 2);
		}

		g.drawImage(offScrImage, 0, 0, this.getWidth(), this.getHeight(), this);

	}


	public Dimension getPreferredSize() {
		return new Dimension(offScrImage.getWidth(this), offScrImage.getHeight(this));
	}

	
	boolean pruefeZugGerade(int c1, int r1, int c2, int r2) {
		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		if (c1 == c2 && r1 != r2) {
			int rd;
			if (r1 < r2)
				rd = 1;
			else
				rd = -1;

			bOK = true;
			for (int r = r1 + rd; r != r2; r += rd) {
				if (Brett[r][c1] != -1) {
					bOK = false;
					break;
				}
			}
		} else if (r1 == r2 && c1 != c2) {
			int cd;
			if (c1 < c2)
				cd = 1;
			else
				cd = -1;

			bOK = true;
			for (int c = c1 + cd; c != c2; c += cd) {
				if (Brett[r1][ c] != -1) {
					bOK = false;
					break;
				}
			}
		}

		return bOK;
	}

	boolean pruefeZugDiagonal(int c1, int r1, int c2, int r2) {
		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		if ((c1 + r1) % 2 == 0 && (c2 + r2) % 2 == 0) {
			if (c1 + r1 == c2 + r2) {
				bOK = true;
			} else if (c1 - r1 == c2 - r2) {
				bOK = true;
			}
		} else if ((c1 + r1) % 2 == 1 && (c2 + r2) % 2 == 1) {
			if (c1 + r1 == c2 + r2) {
				bOK = true;
			} else if (c1 - r1 == c2 - r2) {
				bOK = true;
			}
		}
		if (bOK) {
			int cd;
			if (c1 < c2)
				cd = 1;
			else
				cd = -1;
			int rd;
			if (r1 < r2)
				rd = 1;
			else
				rd = -1;

			int r = r1 + rd;
			int c = c1 + cd;
			for (; c != c2; r += rd, c += cd) {
				if (Brett[r][ c] != -1) {
					bOK = false;
					break;
				}
			}
		}

		return bOK;
	}

	boolean pruefeZug(int c1, int r1, int c2, int r2) {
		if (c1 == c2 && r1 == r2)
			return false;

		boolean bOK = false;
		int nPiece = Brett[r1][c1];
		int nPType = nPiece % 6;
		int ZerstoereFigur = Brett[r2][c2];
		int nDestPType = ZerstoereFigur % 6;

		switch (nPType) {
		case BauerS:
			if (nPiece < 6) {
				if (c1 == c2) {
					if (r1 == r2 - 1) {
						if (ZerstoereFigur == -1)
							bOK = true;
					} else if (r1 == r2 - 2 && r1 == 1) {
						if (Brett[r2 - 1][c1] == -1)
							bOK = true;
					}
				} else if (c1 == c2 + 1 || c1 == c2 - 1) {
					if (r1 == r2 - 1) {
						if (ZerstoereFigur != -1 && ZerstoereFigur > 5)
							bOK = true;
					}
				}
			} else {
				if (c1 == c2) {
					if (r1 == r2 + 1) {
						if (ZerstoereFigur == -1)
							bOK = true;
					} else if (r1 == r2 + 2 && r1 == 6) {
						if (Brett[r2 + 1][c1] == -1)
							bOK = true;
					}
				} else if (c1 == c2 + 1 || c1 == c2 - 1) {
					if (r1 == r2 + 1) {
						if (ZerstoereFigur != -1 && ZerstoereFigur < 6)
							bOK = true;
					}
				}
			}
			break;
		case TurmS:
			bOK = pruefeZugGerade(c1, r1, c2, r2);
			break;
		case SpringerS:
			if (r1 == r2 - 2 || r1 == r2 + 2) {
				if (c1 == c2 - 1 || c1 == c2 + 1) {
					bOK = true;
				}
			} else if (c1 == c2 - 2 || c1 == c2 + 2) {
				if (r1 == r2 - 1 || r1 == r2 + 1) {
					bOK = true;
				}
			}
			break;
		case LaeuferS:
			bOK = pruefeZugDiagonal(c1, r1, c2, r2);
			break;
		case DameS:
			bOK = pruefeZugGerade(c1, r1, c2, r2);
			if (bOK == false)
				bOK = pruefeZugDiagonal(c1, r1, c2, r2);
			break;
		case KoenigS:
			if (Math.abs(r1 - r2) < 2 && Math.abs(c1 - c2) < 2
					&& (Math.abs(r1 - r2) != 0 || Math.abs(c1 - c2) != 0))
				bOK = true;
			break;
		default:
			break;
		}

		if (bOK == true) {
			if (nPiece < 6 && (ZerstoereFigur == -1 || ZerstoereFigur > 5))
				bOK = true;
			else if (nPiece > 5 && (ZerstoereFigur == -1 || ZerstoereFigur < 6))
				bOK = true;
			else
				bOK = false;
		}

		return bOK;
	}


	public void mouseClicked(MouseEvent e) {
		if (AktiveFigur[0] >= 0) {
			int x = e.getX();
			int y = e.getY();

			// Finde die Spalte und Reihe heraus
			Dimension d = getSize();
			int c = (int) ((x * 8) / d.width);
			int r = (int) ((y * 8) / d.height);
			if (c < 0 || c > 7)
				return;
			if (r < 0 || r > 7)
				return;

			if (pruefeZug(AktiveFigur[0], AktiveFigur[1], c, r)) {
				Brett[r][ c] = Brett[AktiveFigur[1]][AktiveFigur[0]];
				Brett[AktiveFigur[1]][AktiveFigur[0]] = -1;
				nPlayer = (nPlayer + 1) % 2;
			}

			AktiveFigur[0] = -1;
			AktiveFigur[1] = -1;
		} else {
			int x = e.getX();
			int y = e.getY();

			// Finde die Spalte und Reihe heraus
			Dimension d = getSize();
			int c = (int) ((x * 8) / d.width);
			int r = (int) ((y * 8) / d.height);
			if (c < 0 || c > 7)
				return;
			if (r < 0 || r > 7)
				return;

			// Prüfe, ob da was liegt
			// Wenn ja, mache daraus ein aktives Feld
			if (Brett[r][ c] != -1) {
				// Prüfe, welcher Spieler dran ist
				if ((Brett[r][ c] < 6 && nPlayer == 0)
						|| (Brett[r][ c] > 5 && nPlayer == 1)) {
					AktiveFigur[0] = c;
					AktiveFigur[1] = r;
				}
			}
		}

		repaint();
	}



	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}


	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}


	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub

	}


	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}	

	public void actionPerformed(ActionEvent e) {

		if (e.getSource() == neuesSpiel){
			applikation.validate();
		}
		if (e.getSource() == beenden){
			System.exit(0);
		}
		if (e.getSource() == anleitung){
			System.out.println("Anleitung wurde angeklickt");
		}
		if (e.getSource() == spielregeln){	
			
			//hier soll der Text von Spielregeln.txt in einem Fenster erscheinen
		

		}

		if (e.getSource() == vsMensch){	

			System.out.println("vsMensch wurde angeklickt");
		}

		if (e.getSource() == vsComputer){	

			System.out.println("vsComputer wurde angeklickt");
		}

	}
	
	



	public static void main(String[] args) {
		new Schach();
	}
}

Nun wollte ich lieber ein Fenster, das man vielleicht auch irgendwie schließen kann, geht das auch mit InternalFrame? Oder geht es anders, Internal Frame ist bei meinem FrameWork etwas problematisch...
Ich wollte, dass die TextArea oder halt was anderes erscheint, wenn ich auf Spielregeln im JMenu klicke...hab das in ActionListener verschoben, aber so leicht geht es anscheinend ned?

Hier nochmal der Code für das Einlesen

PHP:
        JTextArea textArea = new JTextArea();
        try {
            textArea.read(new FileReader("C:/Dokumente und Einstellungen/fschwarz/Desktop/Projekt/Schachregeln.txt"), "");
        } catch (Exception e) {
            e.printStackTrace();
        }
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setPreferredSize(new Dimension(320, 240));
        add(scrollPane);
        pack();
        
        scrollPane.setVisible(false);
        textArea.setVisible(false);

Aber ich kann ja auch kein try catch Block in ein ActionListener packen oder? hm...
 

Neue Beiträge

Zurück