AWT-Klasse in SWING-Klasse umwandeln

Naja wenn ich halt das Einlesen ausschneide und da einfüge, wo ich das eigentlich haben möchte...bei Spielregeln im JMenü(ActionEvent) ganz unten.

Also so:

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() {

     

    

		
		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
		
	        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);
		}

		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();
	}
}

Dann is da ein Duplicate bei e... ...die Methode printStackTrace geht auch ned
 
Zuletzt bearbeitet:
Moin,

meinst Du diese Stelle?
try
{
textArea.read(new FileReader("C:/Dokumente und Einstellungen/fschwarz/Desktop/Projekt/Schachregeln.txt"), "");
}
catch (Exception e)
{
e.printStackTrace();
}

Dann catch doch hier einfach "(Exception x) " .....
Oder versteh' ich Deine Frage nicht ?

Gruß
Klaus
 
ja aber auch wenn ich das umbenenne und die Methode printStackTrave einfach weglasse, dann zeigt er mir nix an, wenn ich auf Spielregeln klicke, auch wenn alles SetVisible auf true ist...
 
normalerweise sollte doch hier die TextArea erscheinen, wenn ich auf Spielregeln klicke oder?
Code:
	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
		
	        JTextArea textArea = new JTextArea();
	        try {
	            textArea.read(new FileReader("C:/Dokumente und Einstellungen/fschwarz/Desktop/Projekt/Schachregeln.txt"), "");
	        } catch (Exception x) {
	            x.printStackTrace();
	        }
	        JScrollPane scrollPane = new JScrollPane(textArea);
	        scrollPane.setPreferredSize(new Dimension(320, 240));
	        add(scrollPane);
	        pack();
	        
	        scrollPane.setVisible(true);
	        textArea.setVisible(true);
		}

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

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

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

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

	}
 
hab jetzt festgestellt, wenn ich aber auf neues Spiel klicke, dann zeigt er mir die Textarea an... brauch ich dazu unbedingt application.validate(); oder wie?
 
Hallo,
was mich jetzt ein wenig irritiert, ist, dass mein System hier gar kein "read" für jTextArea kennt :rolleyes: (JBuilder 2007 mit Java 1.4.2) .....

Den FileReader benutze ich hier auch nur im Zusammenhang mit "BufferdReader", also in der Art

Code:
BufferedReader f
f = new BufferedReader(new FileReader(strInitFile));
String line;
while ( (line = f.readLine()) != null) 
{ 
    // tue was mit 'line', bspw.:
   textArea.setText( line );
}

Vielleicht solltest Du es besser in der Art umbauen ...
Viel Erfolg!

Gruß
Klaus
 
ja...so etwa?

Code:
BufferedReader f;
			f = new BufferedReader(new FileReader("C:/Dokumente und Einstellungen/fschwarz/Desktop/Projekt/Schachregeln.txt"));
			String line;
			try {
				while ( (line = f.readLine()) != null) 
				{ 
				    // tue was mit 'line', bspw.:
				   textArea.setText( line );
				}
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

nur den Pfad nimmt er leider ned... Unhandeled exception typeFileNOTFoundException
 
Hallo,

wie es die Exception schon besagt, findet er die Datei nicht :suspekt:

Du wirst den Pfad anders eingeben müssen:
Code:
f = new BufferedReader(new FileReader("C:\\Dokumente und Einstellungen\\fschwarz\\Desktop\\Projekt\\Schachregeln.txt"));

Gruß
Klaus
 
Ne...so einfach isses leider ned...habe schon mal vorhin mit der anderen Art so einlesen können, aber wenn ich deins nehme, dann zeigt er immer noch den selben Fehler an nach speichern und neustarten...komisch...
 
Zurück