JLabel - Text dynamisch ändern

chuvak

Erfahrenes Mitglied
Ich habe einen JLabel "label1" dessen Text ich durch Klick auf den JButton "button1" ändern möchte. Leider bekomme ich einen Fehler (java.lang.NullPointerException).

Hier ist der Quelltext:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Main extends JFrame implements ActionListener
{
    private JLabel label1;

    public Main(String titel)
    {
        super(titel);

        this.setLayout(new FlowLayout());

        JButton button1 = new JButton("Button");
        this.add(button1);
        button1.addActionListener(this);

        JLabel label1 = new JLabel("Ausgangstext");
        this.add(label1);
    }

 	public void actionPerformed(ActionEvent e)
       {
        label1.setText("Neuer Text");
	}


    public static void main(String[] args)
    {
        Main frame = new Main("Fenstertitel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(250, 100);
        frame.setVisible(true);
    }
}
 
Moin,

Java:
// ändere diese Zeile:
JLabel label1 = new JLabel("Ausgangstext");

// in diese um:
label1 = new JLabel("Ausgangstext");

Danach sollte es funktionieren.
Problem ist halt, dass Du zwei mal die Variable label1 deklarierst.
Und diese ist mit Deinem Code nur innerhalb der Methode zugänglich.
Die actionPerformed-Methode nutzt aber die Klassenvariable.
Somit die NullPointerException.

Gruß,
Xan
 
Das hängt mit der Sichtbarkeit zusammen.

In Zeile 7 deklarierst du ein Label. In Zeile 19 deklarierst du ein gleichnamiges Label und fügst es dann ins GUI ein. In Zeile 25 greifst du aber auf das in Zeile 7 deklarierte Label zu und das ist nur deklariert, aber nicht initialisiert, also ist es null (null) und daher auch die NullPointerException.

Wenn du die Zeile 25 in folgende änderst, dann sollte es gehen.
Code:
label1 = new JLabel("Ausgangstext");

Also einfach den Typ wegnehmen, dann wird kein neues Label deklariert, sondern das bereits deklarierte initialisiert und dann sollte es gehn.
 

Neue Beiträge

Zurück