ActionListener erkennt Variable nicht

Java_Fan_

Mitglied
Guten Abend,

ich habe folgendes Programm geschrieben

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Fenster extends JFrame implements ActionListener
{
                       
    public int anzahlKnöpfe = 10;                                  //Definiert die Anzahl der Knöpfe am Taschenrechner
    private String name;
    JButton[] button = new JButton[anzahlKnöpfe];
    public Fenster()
    {
        super("Taschenrechner");                            //Konstruktraufruf von JFrame
                     
        this.setSize(500,300);                              //Definiert die Größe des Frames
        this.setLayout(new GridLayout(0,5));                //Verwendet den GridLayoutManager
     }
 
     public void erstelleButton()
     {
           for(int i = 0; i < button.length; i++)              //Schleife ließt größe des Arrays aus
        {
            button[i] = new JButton(Integer.toString(i));   //Erzeugen von Button Objekten und
            this.add(button[I]);                            //fügt Button hinzu
            button[i].setPreferredSize(new Dimension(10,10));
            button[i].addActionListener(this);
        }
        JButton plus = new JButton("+");                    //Hinzufügen der Operatoren
        this.add(plus);
        plus.addActionListener(this);
        JButton minus = new JButton("-");
        this.add(minus);
        minus.addActionListener(this);
        JButton geteilt = new JButton("/");
        this.add(geteilt);
        geteilt.addActionListener(this);
        JButton mal = new JButton("*");
        this.add(mal);
        mal.addActionListener(this);
    }
    
     public void actionPerformed(ActionEvent e)
     {
         if(e.getSource() == this.mal)
         {
         }
     }
}

Java:
public class Taschenrechner
{
    public static void main(String argv[])
    {
        Fenster f = new Fenster();
        f.erstelleButton();
        f.setVisible(true);
    }
}

Nun kommt aber folgende Fehlermeldung: cannot find symbol - variable mal

Dabei verweist der Compiler auf die Zeile

Java:
     public void actionPerformed(ActionEvent e)
     {
         if(e.getSource() == this.mal)
         {
         }
     }


Kann mir bitte jemand erklären, woran das genau liegt bzw. sagen, was ich falsch mache?
 
Zuletzt bearbeitet von einem Moderator:
Die Variable ist ja auch nur eine lokale Variable in einer Funktion und keine Instanzvariable. Mach es zu einer Instanzvariable und schon geht auch ein this.mal.
 
Leider tritt bei diesem code nun folgender fehler auf:

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Fenster extends JFrame implements ActionListener
{
                       
    public int anzahlKnöpfe = 10;                                  //Definiert die Anzahl der Knöpfe am Taschenrechner
    private String name;
    public JButton plus;
    public JButton minus;
    public JButton geteilt;
    public JButton mal;
    public JButton display;
    public JPanel panel;
    public JButton[] button = new JButton[anzahlKnöpfe];
    public Fenster()
    {
        super("Taschenrechner");
        JButton display = new JButton("0");
        display.setEnabled(false);
        add(display, BorderLayout.NORTH);
        JPanel panel = new JPanel();                        //Erzeugung eines Panels
        this.add(panel);
        panel.setLayout(new GridLayout(4,4));
        this.setSize(500,300);
    }
 
 
     public void erstelleButton()
     {
        for(int i = 0; i < button.length; i++)                          //Schleife ließt größe des Arrays aus
        {
            this.button[i] = new JButton(Integer.toString(i));               //Erzeugen von Button Objekten und
            panel.add(button[i]);
            button[i].setPreferredSize(new Dimension(10,10));
            button[i].addActionListener(this);
        }
        plus = new JButton("+");                                         //Hinzufügen der Operatoren
        panel.add(plus);
        plus.addActionListener(this);
        minus = new JButton("-");
        panel.add(minus);
        minus.addActionListener(this);
        geteilt = new JButton("/");
        panel.add(geteilt);
        geteilt.addActionListener(this);
        mal = new JButton("*");
        panel.add(mal);
        mal.addActionListener(this);
    }
 
     public void actionPerformed(ActionEvent e)
     {
           String input = e.getActionCommand();
           display.setText(display.getText() + input);
     }
     
     
}

Code:
public class Taschenrechner
{
    public static void main(String argv[])
    {
        Fenster f = new Fenster();
        f.erstelleButton();
        f.setVisible(true);
    }
}

Das programm liefert mir eine nullpointerexception, in der Schleife bei
panel.add(button) was ich nciht verstehe, da die buttons doch alle einen wert über button = new Button(Integer.toString(i)) erhalten haben. Wo liegt denn nun jetzt der Fehelr?[/code]
 
Vielleicht weil die Variable "panel" nicht initialisiert wurde (und daher "null" ist).
Und von "null" (nichts) kannst du nicht die "add" Methode aufrufen. 😉

Hier hast du das selbe Problem wie beim Anfangspost. Im Konstruktor deklarierst du eine lokale Variable "panel" welche initialisiert wird. Die Instanzvariable bleibt uninitialisiert.
 

Zurück
Oben