Array von JLabel mit Grafiken anzeigen

Arkathor

Mitglied
Hallo

Ich habe folgendes Problem, ich will ein kleines Schachspiel machen und dazu will ich das Schachbrett durch 8x8 Array von JLabel machen, und jeder dieser Labe's soll ein bild tragen (ein schwarzer oder weisser Quadrat). Mein Problem ist folgender, wenn ich das Programm starte werden diese Kasten nicht angezeigt (sie sind aber da, denn wenn ich statt Bilder text übergebe dann werden die angezeigt (zwar nicht an den richtigen Stellen, weil zu dicht beieinander und nur 2 ersten Zeilen).
Java:
import javax.swing.*;

public class Schach {

	
	public static void main(String[] args) {
	
	JLabel[][] Brett=new JLabel [8][8]; 	
	JFrame HF=new JFrame("Schach");
	HF.setSize(800, 800);
	HF.setVisible(true);
	ImageIcon myWhiteI =new ImageIcon("White.png");
	ImageIcon myBlackI =new ImageIcon("Black");
	JPanel panel=new JPanel();
	HF.add(panel);
	for (int i=0;i<8;i++)
		for (int n=0;n<8;n++)	
		{if (n%2==0) {Brett[i][n]=new JLabel(myWhiteI);
							  Brett[i][n].setSize(100, 100);
							  Brett[i][n].setLocation(i*100, n*100);
							  panel.add(Brett[i][n]);
							  Brett[i][n].setVisible(true);
							} else
							{Brett[i][n]=new JLabel(myBlackI);
							  Brett[i][n].setSize(100, 100);
							  Brett[i][n].setLocation(i*100, n*100);
							  panel.add(Brett[i][n]);
							  Brett[i][n].setVisible(true);
							} 
								
								
								
				}
	HF.setVisible(true);
	panel.setVisible(true);
	}

}
Hier ist der Javaquellcode, kann mir vieleicht sagen wo der Fehler liegt und welche Fehler ich dort gemacht habe?
 
Variablen klein schreiben,
alle setVisible(true) außer auf JFrame zum Schluss kannst du dir sparen,
übrigens nur dort, nicht am Anfang, das kann schon den Fehler verursachen!

im if/else sind die letzten 4 Zeilen jeweils gleich, könnten nur einmal hinter der Unterscheidung stehen,

direkt ins Panel eingefügt kommt nicht unbedingt automatisch Schachbrett raus, aber erstmal gehts ja nur um die Bilder,
bei mir sind sie vorhanden, dann gehts auch, wobei sicher Black.png anzunehmen ist

schreibe irgendwo
Java:
        File f = new File("White.png");
        System.out.println(f.exists());
        System.out.println(f.getCanonicalPath());
wird true oder false ausgegeben? überprüfe den ausgegebenen Pfad mit der Festplatte, ist dort ein Bild?
damit der Code läuft muss du try/catch verwenden oder 'throws Exception' an die main-Methode schreiben
 
Öhm ausserdem liegt auf deinem Panel noch immer das FlowLayout. Für ein Schachbrett würde sich das GridLayout eignen.
Deine Schleife sollte übrigens kein Schachbrett erzeugen sondern ein Zebrabrett oder so. Grund: In jeder Zeile prüfst du ob n%2==0, das ist aber bei jeder Zeile gleich. Damit es versetzt wird musst du dir was anderes überlegen 🙂
 
Danke, dieses Trick mit dem Pfad hat geholfen (ich hatte die Bilder in dem Bin Folder bei Eclipse kopiert, wo es aber eigentlich nicht sein soll), und danke für den Hinweis mit dem Streifenmuster, ich habe's jetzt korrigiert indem ich geschrieben habe i%2==n%2 und jetzt funktioniert es (die Felder sind zwar nicht ganz dicht beienander und es entstehen kleine Lücken es stört aber nicht). Danke für die Hilfe.🙂
 

Neue Themen


Zurück
Oben