JLabel Icon ändern

Z-Bop

Neues Mitglied
Ich sitze grade an einer Beleg Aufgabe für die Uni. Wir sollen das Game "FLOOD IT". Im Prinzip ist es ein
20 x 20 großes Feld mit 20 x 20 Rechtecken in unterschiedlichen Farben. Diese Farben ändern sich nach der Betätigung eines Buttons. Genau da stecke ich nun.

Wenn das Programm gestartet wird, wird hiermit das Feld erzeugt. Klappt wunderbar.

In game[][] sind quasi Zahlen von 1-4 gespeichert, da die Vergabe der Felder Zufällig ist.
Und in dem Array Colors[] sind dann die jeweiligen Icon Namen gespeichert. 4 An der Zahl.

Code:
	public void fuellen() {
		// Füllt die Matrix mit Feldern, mit zufälligen farben mit der
		// RandomFarbe Methode.
		setLayout(new GridLayout(Floodit.game_size,Floodit.game_size,0,0));
		for (int row = 0; row < game.length; row++) {

			for (int col = 0; col < Floodit.game_size; col++) {
				
				game[row][col] = Floodit.FarbGenerator();
				
				ImageIcon icon = new ImageIcon(  getClass().getResource(Floodit.Colors[game[row][col]]));
				JLabel label = new JLabel(icon);
				add(label);
				setVisible(true);
				
			}
		}
	}

und sieht so aus:
1.jpg

Nun habe ich versucht irgendein Stein im Feld zu ändern in dem ich in der Matrix game[][] z.b. die Position 2 2, 1 gesetzt habe und habe das Feld in einer zweiten Methode neu geladen. Passiert einfach nichts. Testweise habe ich mir dann überlegt einfach fuellen() nach einem Button Klick auszuführen, das müsste ja dann einfach ein neues zufälliges Feld generieren. Passiert leider auch nicht. Er generiert das Feld nur einmal, egal ob ich die Methode nochmal ausführe oder versuche was zu ändern. Ich komme nicht weiter. Bitte um Rat.

Hier die zweite Methode mit der ich einfach das Feld aktualisieren wollte, nachdem ich z.b. ein Feld verändert hab.

Code:
	public void aktualisieren() {
		
		game[2][2] = 1;
		
		for (int row = 0; row < game.length; row++) {

			for (int col = 0; col < Floodit.game_size; col++) {
				
				
				ImageIcon icon = new ImageIcon( getClass().getResource(Floodit.Colors[game[row][col]]));
				JLabel label = new JLabel(icon);
				add(label);
				
				setVisible(true);
				
			}
		}
		
				
			}


Ich weiß das man das auch ohne Icons sondern mit Colors machen könnte, indem man sie färbt. Das möchte ich aber nicht. Was mache ich falsch?

EDIT:

Also ich schaffe es das er weitere 20 x 20 Felder erstellt. Jedoch muss ich erst das fenster minimieren und wieder auf machen damit das sichtbar ist. Ich möchte aber einfach nur den alten Farbenblock mit einem neuen ersetzen...
 
Zuletzt bearbeitet:

Foxei

Bekanntes Mitglied
Hallo Z-Bop,
Ich habe dein Programm einfach mal nachgestellt und zwar mit Colors, ja ich weiß du willst das nicht aber wenn es dich stört kannst du es ja ändern.

Ich habe ein Spielbrett (JPanel) auf dem ein 20*20 GridLayout liegt. Im Constructor erzeugt das Spielbrett 20*20 Steine(JLabel) die sich selbst eine Random Color zuweisen. Jeder Stein beseitzt einen Mouse Listener der erkennt ob jemand des FeldAuswählt (selected). Wenn jemand drückt wird ein PropertyChnage ausgelöst der von einem Listener im Spielbrett der nach Erzeugung von Spielbrett dem Stein zugewiesen wurde. Diese deselcted alle anderen Steine die er Gespeichert hat, damit immer nur einer ausgewählt ist. Speichern tut das SpielBrett alle Steine in einer HasMap wobei jeder Stein seiner Koordinate die in einem Point gespeichert ist zugewiesen ist.

Drückt man nun einen Button hohlt sich der ActionListener der in der SpielFrame ist aus dem SpielBrett den momentan Ausgewählten Stein und setzt seine Color gleich der eigenen.

Wenn du das nun auf Icons ändern möchtest musst du nur im Stein die Random Methode auf Icons ändern und die Buttons mit Icons ändern so wie die ActionPerformed Methode auf Icons umstellen und du hättest dein Programm.

Da ich nicht deinen ganzen Code hatte wusste ich nicht warum es bei dir nicht geht.

Gruß Simon :)

Stein.java
Java:
package Schachbrett;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;

import javax.swing.JLabel;
import javax.swing.border.LineBorder;

public class Stein extends JLabel{
	private boolean selected=false;
	public Stein() {
		setPreferredSize(new Dimension(20,20));
		setBackground(randomColor());
		setOpaque(true);
		addMouseListener(new MouseAdapter() {
			public void mouseReleased(java.awt.event.MouseEvent e) {
				setSelected(!selected);
			};
		});
	}

	private Color randomColor() {
		int zahl = (int)((Math.random()) * 5 + 1);
		Color color=null;
		switch (zahl) {
		case 1:
			color=Color.RED;
			break;
		case 2:
			color=Color.CYAN;
			break;
		case 3:
			color=Color.MAGENTA;
			break;
		case 4:
			color=Color.ORANGE;
			break;
		case 5:
			color=Color.GREEN;
			break;
		}
		return color;
	}

	public boolean isSelected() {
		return selected;
	}

	public void setSelected(boolean selected) {
		firePropertyChange("selected", this.selected, selected);
		this.selected = selected;
		setBorder(selected?new LineBorder(Color.BLACK,2):null);
	}
}

SpielBrett.java
Java:
package Schachbrett;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Point;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashMap;

import javax.swing.JPanel;

public class SpielBrett extends JPanel{
	private HashMap<Point, Stein> map=new HashMap<Point, Stein>();
	public SpielBrett() {
		setPreferredSize(new Dimension(421,421));
		setLayout(new GridLayout(20,20,1,1));
		
		initMap();
	}
	private void initMap() {
		for(int x=0;x<20;x++){
			for(int y=0;y<20;y++){
				Stein stein =new Stein();
				map.put(new Point(x, y), stein);
				add(stein);
				stein.addPropertyChangeListener("selected", new PropertyChangeListener() {
					@Override
					public void propertyChange(PropertyChangeEvent evt) {
						if((boolean)evt.getNewValue())
							for(Stein s:map.values()){
								if(!s.equals(evt.getSource()))
								s.setSelected(false);
							}
					}
				});
			}
		}
	}
	public Stein getSelectedStone(){
		for(Stein s:map.values()){
			if(s.isSelected())
			return s;
		}
		return null;
	}
}

SpielFrame.java
Java:
package Schachbrett;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.GridBagLayout;

import javax.swing.JButton;

import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SpielFrame extends JFrame implements ActionListener{

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					SpielFrame frame = new SpielFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	private SpielBrett brett;
	public SpielFrame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		GridBagLayout gbl = new GridBagLayout();
		gbl.columnWeights = new double[]{1.0, 1.0, 1.0, 1.0, 1.0};
		gbl.rowWeights = new double[]{1.0, 0.0};
		setLayout(gbl);
		
		brett = new SpielBrett();
		GridBagConstraints gbc_panel = new GridBagConstraints();
		gbc_panel.gridwidth = 5;
		gbc_panel.insets = new Insets(0, 0, 5, 0);
		gbc_panel.fill = GridBagConstraints.BOTH;
		gbc_panel.gridx = 0;
		gbc_panel.gridy = 0;
		add(brett, gbc_panel);
		
		JButton btnNewButton = new JButton("");
		btnNewButton.addActionListener(this);
		btnNewButton.setBackground(Color.RED);
		btnNewButton.setPreferredSize(new Dimension(30, 30));
		GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
		gbc_btnNewButton.insets = new Insets(0, 0, 5, 0);
		gbc_btnNewButton.gridx = 0;
		gbc_btnNewButton.gridy = 1;
		add(btnNewButton, gbc_btnNewButton);
		
		JButton btnNewButton_1 = new JButton("");
		btnNewButton_1.addActionListener(this);
		btnNewButton_1.setBackground(Color.CYAN);
		btnNewButton_1.setPreferredSize(new Dimension(30, 30));
		GridBagConstraints gbc_btnNewButton_1 = new GridBagConstraints();
		gbc_btnNewButton_1.insets = new Insets(0, 0, 5, 0);
		gbc_btnNewButton_1.gridx = 1;
		gbc_btnNewButton_1.gridy = 1;
		add(btnNewButton_1, gbc_btnNewButton_1);
		
		JButton btnNewButton_2 = new JButton("");
		btnNewButton_2.addActionListener(this);
		btnNewButton_2.setBackground(Color.MAGENTA);
		btnNewButton_2.setPreferredSize(new Dimension(30, 30));
		GridBagConstraints gbc_btnNewButton_2 = new GridBagConstraints();
		gbc_btnNewButton_2.insets = new Insets(0, 0, 5, 0);
		gbc_btnNewButton_2.gridx = 2;
		gbc_btnNewButton_2.gridy = 1;
		add(btnNewButton_2, gbc_btnNewButton_2);
		
		JButton btnNewButton_3 = new JButton("");
		btnNewButton_3.addActionListener(this);
		btnNewButton_3.setBackground(Color.ORANGE);
		btnNewButton_3.setPreferredSize(new Dimension(30, 30));
		GridBagConstraints gbc_btnNewButton_3 = new GridBagConstraints();
		gbc_btnNewButton_3.insets = new Insets(0, 0, 5, 0);
		gbc_btnNewButton_3.gridx = 3;
		gbc_btnNewButton_3.gridy = 1;
		add(btnNewButton_3, gbc_btnNewButton_3);
		
		JButton btnNewButton_4 = new JButton("");
		btnNewButton_4.addActionListener(this);
		btnNewButton_4.setBackground(Color.GREEN);
		btnNewButton_4.setPreferredSize(new Dimension(30, 30));
		GridBagConstraints gbc_btnNewButton_4 = new GridBagConstraints();
		gbc_btnNewButton_4.insets = new Insets(0, 0, 5, 0);
		gbc_btnNewButton_4.gridx = 4;
		gbc_btnNewButton_4.gridy = 1;
		add(btnNewButton_4, gbc_btnNewButton_4);
		pack();
		setLocationRelativeTo(null);
	}

	@Override
	public void actionPerformed(ActionEvent evt) {
		Stein s=brett.getSelectedStone();
		if(s==null)
			return;
		s.setBackground(((JButton)evt.getSource()).getBackground());
	}

}
 

Anhänge

  • FrabenBrett.png
    FrabenBrett.png
    43,4 KB · Aufrufe: 33
Zuletzt bearbeitet:

Harry Kane

Top Contributor
In deiner aktualisieren-Methode fügst du ein neues JLabel hinzu. Was du eigentlich möchtest, ist, das JLabel an der Stelle mit einer neuen Farbe zu versehen.
Ein Ansatzpunkt könnte sein, dass du deine JLabels in einem 2D Array speicherst und auf dieses Array in deiner aktualisiere-Methode zugreifst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Icon auf JLabel nach Knopfdruck ändern Java Basics - Anfänger-Themen 20
J JLabel bzw. Image Icon mit KeyEvent bewgen Java Basics - Anfänger-Themen 9
Tom/S JLabel Icon Farbe Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
L JLabel Icon Größe anpassen Java Basics - Anfänger-Themen 11
SexyPenny90 JLabel Text und Icon untereinander verwenden Java Basics - Anfänger-Themen 3
0 Icon in JLabel Java Basics - Anfänger-Themen 6
G JLabel - Icon und Text untereinander anordnen? Java Basics - Anfänger-Themen 2
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
JUNSKI Zeilenumbruch JLabel Java Basics - Anfänger-Themen 1
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
S Kontrollieren, ob ein Jlabel nicht sichtbar ist Java Basics - Anfänger-Themen 6
S Input/Output JLabel verschieben Java Basics - Anfänger-Themen 7
AnnaBauer21 GridBagLayout JLabel weightx: Unterschiedliche Breite mit & ohne Text Java Basics - Anfänger-Themen 6
CptK Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
CptK Methoden JLabel erstellen & verschieben Java Basics - Anfänger-Themen 1
T JLabel hat falsche größe Java Basics - Anfänger-Themen 1
A JLabel mit button drücken verändern Java Basics - Anfänger-Themen 6
CptK JLabel im Array Java Basics - Anfänger-Themen 2
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
P Auf JLabel zugreifen Java Basics - Anfänger-Themen 12
P Erste Schritte JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 4
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
M Vererbung Ein JLabel einer Elternklasse anzeigen Java Basics - Anfänger-Themen 8
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
J Array in JLabel ausgeben Java Basics - Anfänger-Themen 2
S Variablen JLabel backImagePanel Fehlermeldung Java Basics - Anfänger-Themen 3
snipesss [Java] Schriftart und Schriftgröße von JLabel in einer Zeile festlegen? Java Basics - Anfänger-Themen 3
J JLabel cannot be resolved Java Basics - Anfänger-Themen 8
S JLabel sichtbar machen/GUI Java Basics - Anfänger-Themen 3
WetWer Animation JLabel Java Basics - Anfänger-Themen 2
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
L Variable für JLabel wird nicht erzeugt Java Basics - Anfänger-Themen 6
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
T Objekt in ein JLabel der GUI übergeben Java Basics - Anfänger-Themen 3
S JLabel an Methode übergeben Java Basics - Anfänger-Themen 2
D Ausgabe über JLabel Java Basics - Anfänger-Themen 12
M Erste Schritte Wie speichert und gibt man Arrays aus? (JLabel) Java Basics - Anfänger-Themen 12
M Fangspiel-Probleme (JLabel, Objekt zurücksetzen) Java Basics - Anfänger-Themen 3
C Rechenaufgabe im JLabel ausrechnen Java Basics - Anfänger-Themen 2
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
D JLabel ändern in actionperformed Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
G drawString/ JLabel updaten Java Basics - Anfänger-Themen 1
G mouseDragged auf Jlabel Java Basics - Anfänger-Themen 2
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
M Frage zu JLabel Java Basics - Anfänger-Themen 5
T JLabel-Bilderpfad ändern... Java Basics - Anfänger-Themen 2
T JLabel anzeigen lassen... Java Basics - Anfänger-Themen 6
T Mein String in ein JLabel stecken Java Basics - Anfänger-Themen 2
Sogomn JLabel in anderer Klasse zum JFrame hinzufügen Java Basics - Anfänger-Themen 2
T JLabel zum klicken... Java Basics - Anfänger-Themen 15
W Datentypen String-Ausgabe in jLabel Java Basics - Anfänger-Themen 14
J JLabel Ausgabe Java Basics - Anfänger-Themen 3
B mouseClicked JLabel Array mitteilen Java Basics - Anfänger-Themen 6
A Zeilenumbruch im Jlabel Java Basics - Anfänger-Themen 11
3 JLabel - Text in mehreren Zeilen zentrieren Java Basics - Anfänger-Themen 5
R JLabel imageicon jede Sekunde wechseln Java Basics - Anfänger-Themen 3
G GUI JLabel ersetzen Java Basics - Anfänger-Themen 3
M Zeilenumbruch in JLabel Java Basics - Anfänger-Themen 51
A Bildgröße automatisch auf JLabel Größe konvertieren Java Basics - Anfänger-Themen 9
S Text in einem JLabel nur zum Teil Fett Java Basics - Anfänger-Themen 2
B JLabel Text Formatierung Java Basics - Anfänger-Themen 5
J Bild auf JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 11
S NullPointerException bei zweidimensionalem JLabel-Array Java Basics - Anfänger-Themen 4
T JLabel richtig anordnen? wie gehts? Java Basics - Anfänger-Themen 9
L GridLayout mit JLabel-Array füllen Java Basics - Anfänger-Themen 12
B JLabel löschen/überschreiben Java Basics - Anfänger-Themen 10
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
A JLabel erst auf null dann auf einen Wert setzen Java Basics - Anfänger-Themen 7
F JLabel-Background Java Basics - Anfänger-Themen 7
T JLabel Farbe ändern, Problem Java Basics - Anfänger-Themen 2
T JLabel mit Text und Bild Java Basics - Anfänger-Themen 3
C JLabel markieren Java Basics - Anfänger-Themen 2
M BeanBinding Jlist an Jlabel Java Basics - Anfänger-Themen 2
M OOP JLabel werden nicht korrekt eingefärbt Java Basics - Anfänger-Themen 6
P JLabel prüfen,... Java Basics - Anfänger-Themen 6
M JLabel auf JPanel positionieren Java Basics - Anfänger-Themen 8
P JLabel auf JFrame - Schrift vergrößern Java Basics - Anfänger-Themen 2
Z Fonts in einem JLabel Java Basics - Anfänger-Themen 7
MonsterBit setText bei JLabel Java Basics - Anfänger-Themen 16
K Zufällige Auswahl innerhalb eines Arrays und Arrays aus JLabel füllen Java Basics - Anfänger-Themen 32
D JPanel + ein JLabel Java Basics - Anfänger-Themen 8
M JLabel attribut wert zuweisen Java Basics - Anfänger-Themen 2
E JLabel deaktivieren ohne Veränderung der Darstellung Java Basics - Anfänger-Themen 2
JAVAnnik variable erhöhen bei Klick auf JLabel Java Basics - Anfänger-Themen 3
T JLabel wird nicht gesetzt in Schleife Java Basics - Anfänger-Themen 9
T aus stateChanged ein JLabel adden Java Basics - Anfänger-Themen 6
P HTML <input> Feld in einem JLabel auslesen Java Basics - Anfänger-Themen 4
C Inhalt eines Strings in JLabel ausgeben? Java Basics - Anfänger-Themen 21
T JLabel durch ActionListener ändern Java Basics - Anfänger-Themen 4
L Rahmen bei jLabel Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben