"label.setText" funktioniert nicht

Jack159

Bekanntes Mitglied
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.

Java:
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);
	}

}
 
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.
 
Zuletzt bearbeitet von einem Moderator:
Ja genau:
Code:
JLabel lblNewLabel;
Vorher als Objektvariable deklarieren. Dann musst du das Objekt vorher erstellen
Code:
lblNewLabel = new JLabel();
, bevor du das mit dem Button und dem ActionListener machst.
 
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? 😵
 
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.
 
@ VP:

Java:
JLabel lblNewLabel = new JLabel("New label");
Wird hier nicht schon die Objektvariable/Objektreferenz "lblNewLabel" erzeugt/deklariert?
 
Java:
...
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");
                
            }
        });

...
 

Zurück
Oben