Swing JLabel (mit einer Grafik) aktualisieren

macfly

Mitglied
Hallo,

ich habe ein Problem mit dem Aktualisieren eines JLabels. Und zwar habe ich ein JPanel, worauf sich ein JLabel befindet, welches durch folgende Methode ein JLabel-Objekt übergeben bekommt.

Java:
public JLabel GetRandomDiceImg() throws IOException {
		
		BufferedImage myPicture = ImageIO.read(new File(RandomImage()));
		JLabel picLabel = new JLabel(new ImageIcon( myPicture ));
		
		return picLabel;
	}

Das Ganze wird hier aufgerufen:
Java:
private BranchGroup initControlBar() {
		
		labelWuerfelEins = new JLabel();
		controlbar = new JPanel();
		buttonWuerfeln = new JButton("Wuerfeln");
		
		controlbar.add(buttonWuerfeln);
		controlbar.add(labelWuerfelEins);
		
		this.getContentPane().add("South", controlbar);

		buttonWuerfeln.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				try {
					labelWuerfelEins = new RandomDiceImg().GetRandomDiceImg();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

			}
		});
			
		BranchGroup bg = new BranchGroup();
		
		bg.compile();
		return bg;
	}

Nach einem Klick auf den "Würfeln"-Button soll sich das JLabel "label" aktualisieren. Die repaint()-Methode funktioniert leider nicht.

Hat jemand eine Ahnung, wie ich das hinbekomme oder wo der Fehler liegt?

gruß mf
 
Klar, du erstellst ja auch ein neues JLabel, dass du nie zu deinem Panel hinzufügst:

Java:
  public void actionPerformed(ActionEvent e) {
                try {
                    controlbar.remove(labelWuerfelEins);
                    labelWuerfelEins = new RandomDiceImg().GetRandomDiceImg();
                    controlbar.add(labelWuerfelEins);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
 
            }

BTW: Du solltest einen LayoutManager verwenden.
 
Ah super, danke dir :toll:

Daran hatte ich gar nicht gedacht, aber nun wo du es sagst.

Ich habe übrigens nach dem
Java:
controlbar.add(labelWuerfelEins);
noch ein
Java:
controlbar.revalidate();
hinzugefügt, damit das Panel neugeladen/validiert und somit die Änderung auch sichtbar wird.

gruß mf
 

Zurück
Oben