Hi,
ich hoffe ihr könnt mir helfen, bin leider kein Profi (eher Anfänger )und versuche mich in die Materie einzuarbeiten.
Es geht darum, ein Damespiel zu programmieren. Damit ich die Felder und Stein einfach identifiezieren kann, hab ich mir folgendes überlegt.
Ich lege eine Klasse Feld an, das Spielbrett besteht aus 64 solcher Feldobjekte. Diese Klasse ist von JPanel abgeleitet
Dann lege ich eine Klasse Spielstein und leite diese von JComponent ab.
Das funktioniert:
Das Spielbrett wird erzeugt, ich habe einen mouselistener, der mir erolgreich clicks auf ein Feld abfängt. Jedes Feld kann identifiziert werden.
Was aber nicht geht: Ich kann einem Feld über add kein Spielstein-Objekt zuordnen, bzw, es wird nicht gezeichnet.
Selbst wenn ich testweise auf alle Felder einen Stein legen will, es passiert nix. Wenn ich die das Spielbrett nicht erzeuge (also in meiner Hauptklasse die this.getContenPanel.add([FELD].... weg lasse und die Spielsteine direkt in über z.B.
this.getContenPanel.add(new Spielstein()) hinzufüge, dann wird es gezeichnet.
Jemand eine Idee woran das liegt? Hoffe ich konnte es rüberbringen
Auf
Hier mein Code:
Auf die ListenerKlasse und die Hauptklasse, die nur das Fenster erzeugt verzichte ich jetzt mal
Danke!
ich hoffe ihr könnt mir helfen, bin leider kein Profi (eher Anfänger )und versuche mich in die Materie einzuarbeiten.
Es geht darum, ein Damespiel zu programmieren. Damit ich die Felder und Stein einfach identifiezieren kann, hab ich mir folgendes überlegt.
Ich lege eine Klasse Feld an, das Spielbrett besteht aus 64 solcher Feldobjekte. Diese Klasse ist von JPanel abgeleitet
Dann lege ich eine Klasse Spielstein und leite diese von JComponent ab.
Das funktioniert:
Das Spielbrett wird erzeugt, ich habe einen mouselistener, der mir erolgreich clicks auf ein Feld abfängt. Jedes Feld kann identifiziert werden.
Was aber nicht geht: Ich kann einem Feld über add kein Spielstein-Objekt zuordnen, bzw, es wird nicht gezeichnet.
Selbst wenn ich testweise auf alle Felder einen Stein legen will, es passiert nix. Wenn ich die das Spielbrett nicht erzeuge (also in meiner Hauptklasse die this.getContenPanel.add([FELD].... weg lasse und die Spielsteine direkt in über z.B.
this.getContenPanel.add(new Spielstein()) hinzufüge, dann wird es gezeichnet.
Jemand eine Idee woran das liegt? Hoffe ich konnte es rüberbringen
Auf
Hier mein Code:
Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DameMain extends JFrame {
private Feld feldListe[][] = new Feld[8][8];
/**
* Ändert die Farbe von S auf W und umgekehrt
* @param currentColor
* @return
*/
private Color switchColor(Color currentColor){
if (currentColor.equals(Color.black)) {
return Color.white; }
else {
return Color.black;
}
}
/**
* Konstruktor
*/
public DameMain(){
super("Schachbrett");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(700, 700);
this.setVisible(true);
this.drawSchachbrett();
this.newGame();
}
/**
* Zeichnet das Schachbrett mit Hilfe der Feld-Objekte
*/
private void drawSchachbrett() {
Color f = Color.black ;
int fn = 1;
for (int h = 0; h < 8; h++){
for (int v = 0; v < 8; v++){
feldListe[h][v]= new Feld(h,v,fn,f);
f = switchColor(f);
fn++;
}
f = switchColor(f);
}
this.getContentPane().setLayout(null);
for (int h = 0; h < 8; h++){
for (int v = 0; v < 8; v++){
feldListe[h][v].setBounds(feldListe[h][v].posHorz*feldListe[h][v].fieldSize, feldListe[h][v].posVert*feldListe[h][v].fieldSize, feldListe[h][v].fieldSize, feldListe[h][v].fieldSize);
this.getContentPane().add(feldListe[h][v]);
}
}
this.repaint();
}
public void newGame(){
for (int h = 0; h < 8; h++){
for (int v = 0; v < 8; v++){
feldListe[h][v].setzeStein(new Spielstein());
}
}
}
}
Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class Feld extends JPanel{
protected int posVert;
protected int posHorz;
protected int feldNummer;
protected Color farbe;
final int fieldSize = 75;
protected Spielstein stein;
public Feld(int posVert, int posHorz, int feldNummer, Color farbe) {
super();
this.posVert = posVert;
this.posHorz = posHorz;
this.feldNummer = feldNummer;
this.farbe = farbe;
this.addMouseListener(new MyMouseListener());
}
public void setzeStein(Spielstein stein){
this.stein = stein;
this.add(this.stein);
//this.repaint();
}
public void entferneStein(Spielstein stein){
}
public void paintComponent(Graphics g) {
g.setColor(this.farbe);
g.fillRect(0, 0 , fieldSize, fieldSize);
if (this.farbe.equals(Color.black)){
g.setColor(Color.white);
}
else {
g.setColor(Color.black);
}
g.setFont(new Font("Monospaced", Font.BOLD, 20));
//FontMetrics fm = g.getFontMetrics();
//g.drawString(Integer.toString(this.feldNummer), fieldSize/2-(fm.stringWidth(Integer.toString(this.feldNummer))/2), fieldSize/2 + (fm.getHeight()/2)-fm.getDescent());
}
}
Code:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
public class Spielstein extends JComponent{
public Spielstein(){
super();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillArc(30, 30, 25, 25, 0, 360);
}
}
Auf die ListenerKlasse und die Hauptklasse, die nur das Fenster erzeugt verzichte ich jetzt mal
Danke!