GridBagLayout und Grafik auf JLabel

nachtfieber

Grünschnabel
Hi @ll,

ich bin gerade dabei ein kleines Würfelspiel zu programmieren. Über ein Spielfeld aus Grafiken (liegen auf JLabels) soll eine Spielfigur laufen (ebenfalls eine Grafik auf JLabels).

Dazu habe ich mir die Methode Spielfigur einfügen geschrieben. Diese setzt die Spielfigur in ein vorhandenes GridBagLayout, nachdem sie den neuen Standort bestimmt hat. Das funktioniert beim ersten Aufruf der Methode wunderbar. Meine Methode setzen() berechnet die neuen Koordinaten und das JLabel wird an der richtigen Stelle angezeigt. Führe ich die Methode dann nochmals aus, werden die Koordinaten wiederum richtig berechnet (lasse ich mir in der Konsole ausgeben), aber die Spielfigur wird grundsätzlich im Feld 0,0 des GridbagLayouts angezeigt. Ich versteh das absolut nicht. Was mache ich falsch? Habt ihr vielleicht einen alternativen Lösungsvorschlag?


PHP:
	public void Spielfigur_einfuegen(Spielfeld_center spielfeld_center)
	{
		JLabel bild2 = new JLabel(new ImageIcon("figur1.png"));
		b = setzen(wuerfeln(), position);
	    koordinaten_x = Integer.valueOf(b[0]).intValue();
	    koordinaten_y = Integer.valueOf(b[1]).intValue();
	    
	      
	    spielfeld_center.gbc = spielfeld_center.makegbc (koordinaten_y,koordinaten_x,1,1);
	    System.out.println("Koordinaten x-Achse: " + koordinaten_x);
	    System.out.println("Koordinaten y-Achse: " + koordinaten_y);
	    spielfeld_center.gbl.setConstraints(bild2, spielfeld_center.gbc);
		spielfeld_center.panel1.add(bild2);
		spielfeld_center.panel1.setComponentZOrder(bild2, 0);
		spielfeld_center.panel1.validate();
		spielfeld_center.panel1.repaint();
		
	}
 

Wladimir82

Grünschnabel
Das GridBagLayout ist total falsch für diese Aufgabe.
Verwende ein Absolutes Layout, also einfach ein setLayout(null);
und setzte die Koordinaten direkt beim JLabel mit setLocation

.setLayout
.add

machst du nur einmal.

.setLocation bei jeder Änderung