Schachbrett mit AWT erzeugen

G

gehweg

Gast
Hallo erstmal,

ich habe mir jetzt schon sehr viel über das Programmieren mit Java hier durchgelesen, steige jedoch nicht durch mit swing, da wir in der Schule nur mit awt gearbeitet haben.
In allen bisherigen Threads usw. wird ständig nur swing verwendet bzw. mit swing und awt zusammen etwas erstellt.
Nun hier das Problem:
Ich habe als Fachreferat in Informatik das 8-Damen-Problem und möchte dazu ein Schachbrett erzeugen, hänge hier schon seit ein paar Tagen... Habe es mit Rechtecken probiert bzw. mit Panels. Aber es kann ja nicht sein dass ich 64 Panels oder Rechtecke erzeugen muss "nur" um ein Schachbrett zu erzeugen. Könntet Ihr mir hier ein wenig unter die Arme greifen? Sonst seh ich bald schwarz xD
 

ARadauer

Top Contributor
a nicht sein dass ich 64 Panels oder Rechtecke erzeugen muss "nur" um ein Schachbrett zu erzeugen.
32 rechtecke... ich würd die weißen einfach weiß lassen... du musst die ja auch nicht manuell machen, da machst dir einfach zwei for schleifen...
 
G

gehweg

Gast
Und wie verbinde ich dann das ganze?
Also dass quasi noch die Farben geändert werden und das mit der for-Schleife?
Mein Gedanke war:
Java:
public void paint( Graphics g )
	    {int i;
		  for( i = 0, i < 9,i=i+1)
		  {
	    g.drawRect( 50,50,50,50 ); //1
}
Die Position des Rechtecks weiß ich dass die nicht stimmt, wüsste aber auch nicht wie ich die dann für eine ganze Reihe machen soll.
 

Fu3L

Top Contributor
2 for Schleifen. Die eine geht alle Zeilen durch, die andere alle Spalten. Nun kannst du unterscheiden: In jeder ungeraden Zeile, ist jedes gerade (oder ungerade) weiß, die anderen dann schwarz und umgekehrt (ich weiß nicht, wo man üblicherweise anfängt).

g.setColor(Color.BLACK); dürfte es dann tun ;)
 
G

gehweg

Gast
Ok dankeschön.
Aber ich habe ja überhaupt ein Problem damit erstmal die for-Schleife mit etwas zu verbinden das etwas zeichnet bzw. weiß ich nicht mal ob ich das Schachbrett mit Panels/Labels erzeugen sollte oder mit Rechtecken, weil ich noch Damen auf die Felder setzen und überprüfen muss ob denn diese zu schlagen sind oder nicht (8-Damen-Problem eben)
 

ARadauer

Top Contributor
Muss das zeug anklickbar sein? Ich würd das einfach zeichen... mach eine Klasse die von JComponent erbt und überschreib die paintComponent Methode... daran machst du dann deinen Swing zeichen Code

Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Schachbrett extends JComponent {

	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
hier zeichnen

	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setSize(800, 800);
		frame.add(new Schachbrett());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}

Den aktuellen Zustand deines Datenmodels würde ich da einfach zeichnen...

erstmal die for-Schleife mit etwas zu verbinden das etwas zeichnet [/qutoe]
ja die schleife einfach im paintComponent code verwenden und die kästchen zeichnen...
 
G

gehweg

Gast
Also wie schon oben beschrieben: Ich hab keine Ahnung von swing und swing verwirrt mich total o_O...
Und dann sprichst für mich hier in totalen Rätseln.
 

ARadauer

Top Contributor
Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class Schachbrett extends JComponent {

	public static int width = 10;
	public static int numberOfRows = 400;

	public boolean turn = false;

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		for (int i = 0; i < numberOfRows; i++) {
			for (int j = 0; j < numberOfRows; j++) {
				if (i % 2 == j % 2) {
					g.setColor(turn ? Color.white : Color.black);
				} else {
					g.setColor(turn ? Color.black : Color.white);
				}
				g.fillRect(i * width, j * width, width, width);
			}
		}
	}

	public static void main(String[] args) throws InterruptedException {
		JFrame frame = new JFrame();
		frame.setSize(1600, 1200);
		Schachbrett brett = new Schachbrett();
		frame.add(brett);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		while (true) {
			brett.turn = !brett.turn;
			frame.repaint();
			Thread.sleep(100);
		}
	}

}
das verwirrt mich total -... weheee... jetzt ist mir schlecht... ich sollte eigentlich was sinnvolles arbeiten...
 
G

gehweg

Gast
Also Entschuldigung, aber spreche ich in Rätseln? Es tut mir ja Leid dass ich Hilfe in Anspruch nehme hierbei, aber ich wie oft soll ich noch sagen, dass ich mit import javax.swing.*; nichts anfangen kann da wir in der Schule nur mit import java.awt.*; und import java.awt.event.*; gearbeitet haben...
Nun noch einmal: Wie geht das ohne swing zu benutzen?
 

ARadauer

Top Contributor
Was macht es für einen Unterschied ob du Swing benutzt? Alleine mit AWT kannst dus ja auch nicht. AWT ist 100 Jahre alte. Swing setzt drauf auf. Benutz einfach dein AWT Wissen mit diesen Swing teilen...

Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;


public class Schachbrett extends JComponent {

	public static int width = 75;
	public static int numberOfRows = 8;

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		for (int i = 0; i < numberOfRows; i++) {
			for (int j = 0; j < numberOfRows; j++) {
				if (i % 2 == j % 2) {
					g.setColor(Color.white);
				} else {
					g.setColor(Color.black);
				}
				g.fillRect(i * width, j * width, width, width);
			}
		}
	}

	public static void main(String[] args) throws InterruptedException {
		JFrame frame = new JFrame();
		frame.setSize(800, 600);
		Schachbrett brett = new Schachbrett();
		frame.add(brett);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}

Nun noch einmal: Wie geht das ohne swing zu benutzen?
Ganze ehrlich: keine ahnung :-(
 
F

freak_007

Gast
Hier pures AWT:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.Frame;
 
 
public class Schachbrett extends Component {
 
    public static int width = 75;
    public static int numberOfRows = 8;
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int i = 0; i < numberOfRows; i++) {
            for (int j = 0; j < numberOfRows; j++) {
                if (i % 2 == j % 2) {
                    g.setColor(Color.white);
                } else {
                    g.setColor(Color.black);
                }
                g.fillRect(i * width, j * width, width, width);
            }
        }
    }
 
    public static void main(String[] args) throws InterruptedException {
        Frame frame = new Frame();
        frame.setSize(800, 600);
        Schachbrett brett = new Schachbrett();
        frame.add(brett);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
 
}
[WR]ungetestet[/WR]
 
G

gehweg

Gast
Okai, danke trotzdem^^. Muss dann hal wohl in swing das ganze machen...
Wie kann ich nun quasi auf eine Fläche (grau/weiss) etwas "draufkleben"?? bzw. auf eine bestimmte Position das ganze machen und abrufen ob dort schon etwas ist?
 

Fu3L

Top Contributor
Wie kann ich nun quasi auf eine Fläche (grau/weiss) etwas "draufkleben"?? bzw. auf eine bestimmte Position das ganze machen und abrufen ob dort schon etwas ist?

Du musst nicht nachgucken, ob irgendwo schon etwas gemalt ist. Du musst ein "Datenmodell" haben, wo du die Positionen abspeicherst. Datenmodell klingt groß, kann aber einfach ein Array sein^^
Und "draufkleben" geht einfach indem du in der paintComponent() Methode dein Datenmodell "durchläufst" (nach dem Zeichnen des Hintergrundes) und dann halt Positionen richtig berechnen. Ansonsten malt man zB Kreise für Figuren wie die Hintergrundrechtecke nur halt mit fillOval ;)

PS: AWT und SWING sind fast gleich zu benutzen^^ Stell dich nicht so an *nettgemeint* ;)
 
F

freak_007

Gast
Sorry, hier gehört nur paint:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.Frame;
 
 
public class Schachbrett extends Component {
 
    public static int width = 75;
    public static int numberOfRows = 8;
 
    @Override
    protected void paint(Graphics g) {
        super.paintComponent(g);
        for (int i = 0; i < numberOfRows; i++) {
            for (int j = 0; j < numberOfRows; j++) {
                if (i % 2 == j % 2) {
                    g.setColor(Color.white);
                } else {
                    g.setColor(Color.black);
                }
                g.fillRect(i * width, j * width, width, width);
            }
        }
    }
 
    public static void main(String[] args) throws InterruptedException {
        Frame frame = new Frame();
        frame.setSize(800, 600);
        Schachbrett brett = new Schachbrett();
        frame.add(brett);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
 
}
[WR]ungetestet[/WR][/QUOTE]
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben