# "label.setText" funktioniert nicht



## Jack159 (11. Jun 2011)

Ich bin gerade dabei mir ein simples GUI-Programm zu erstellen mit 1 Button und 1 Label. Wenn man auf den Button klickt, soll im Label der Text "Button wurde geklickt" erscheinen. Das ganze funktioniert aber irgendwie nicht, da mir Eclipse bei Zeile 38 "lblNewLabel" rot unterstreicht. Warum weiß ich nicht.
Die GUI wurde mit WIndowBuilder erstellt.


```
import java.awt.BorderLayout;


public class uoiu extends JFrame {

	private JPanel contentPane;

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

	/**
	 * Create the frame.
	 */
	public uoiu() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JButton btnNewButton = new JButton("New button");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				 lblNewLabel.setText("Button wurde geklickt");
				
			}
		});
		contentPane.add(btnNewButton, BorderLayout.NORTH);
		
		JLabel lblNewLabel = new JLabel("");
		contentPane.add(lblNewLabel, BorderLayout.EAST);
	}

}
```


----------



## Camino (11. Jun 2011)

Das kommt davon, weil du dein lblNewLabel erst in Zeile 44 erstellst...
Evtl. musst du das auch als Objektvariable deklarieren, damit du im ActionListener darauf zugreifen kannst.
Und normalerweise sieht man in Eclipse Fehlermeldungen (und manchmal auch Lösungsmöglichkeiten), wenn man mit der Maus auf die rot markierten Fehler fährt.


----------



## Jack159 (11. Jun 2011)

Was genau muss ich als Objektvariabel deklarieren? lblNewLabel ?


----------



## Final_Striker (11. Jun 2011)

Du musst *zuerst *das Label erzeugen bevor du ihm ein Text hinzufügen kannst.


----------



## Camino (11. Jun 2011)

Ja genau:

```
JLabel lblNewLabel;
```
Vorher als Objektvariable deklarieren. Dann musst du das Objekt vorher erstellen 
	
	
	
	





```
lblNewLabel = new JLabel();
```
, bevor du das mit dem Button und dem ActionListener machst.


----------



## Jack159 (11. Jun 2011)

Final_Striker hat gesagt.:


> Du musst *zuerst *das Label erzeugen bevor du ihm ein Text hinzufügen kannst.



Hatte ich grad gemacht, dann zeigte er mir immer noch die selbe Stelle als Fehler an. Als Fehlerquelle nannte er mir, dass ich lblNewLabel als final makieren soll. Jetzt funktioniert es.
Das ich das Label natürlich zuerst erzeugen muss, bevor ich damit etwas machen kann ist mr klar geworden, aber warum muss ich lblNewLabel als final makieren?


----------



## Camino (11. Jun 2011)

Hast du das JLabel jetzt als Objektvariable deklariert und das Objekt vor dem ActionListener erstellt? Dann dürfte die Fehlermeldung mit dem final nämlich nicht mehr kommen.


----------



## Jack159 (11. Jun 2011)

@ VP:


```
JLabel lblNewLabel = new JLabel("New label");
```
Wird hier nicht schon die Objektvariable/Objektreferenz "lblNewLabel" erzeugt/deklariert?


----------



## Camino (11. Jun 2011)

```
...
public class uoiu extends JFrame {
 
    private JPanel contentPane;

    private JLabel lblNewLabel;     // hier deklarieren
 
...
        

    lblNewLabel = new JLabel("New label");     // ...und hier das Objekt erzeugen

        JButton btnNewButton = new JButton("New button");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                 lblNewLabel.setText("Button wurde geklickt");
                
            }
        });

...
```


----------



## Jack159 (11. Jun 2011)

Jo, jetzt gehts auch ohne final.
Danke für eine Hilfe


----------

