# Java -8 Action Listener für mehrere Buttons



## Janericson (3. Aug 2015)

Hallo,

bin ein Anfänger und soll nach einem Tutorial im Buch ein Programm schreiben, das mir nach Angabe mehrerer Noten bestimmte Dinge berechnen soll wie z.B. den Notenschnitt, die beste Note, die schlechteste Note usw. Das Problem ist das ich im Programm mehrere Buttons habe. Soweit kein Problem doch mit dem Klicken auf ein Button soll dieser unsichtbar werden und ein anderer sichtbar. Wiederum groß auch kein Problem doch jetzt kommt ein dritter Button ins Spiel, der wiederum auch sich unsichtbar machen soll und einen anderen sichtbar. Das ganze ist so verzweigt das ich den Action Listener von einem der Button außerhalb des Erzeugungscode des Buttons schreiben muss. Im Buch wird die Version Java 7 verwendet. Die Befehle die hier genutzt werden, sind scheinbar unter Java 8 nicht mehr nutzbar. Der wichtige Befehl ist:
jBtnNeuActionPerformed(evt);   > Das erkennt Eclipse nicht.


Der Code aus dem Buch:


```
package gui;

/*
* Programm Notenbilanz berechnet aus mehreren eingegebenen
* Noten den Notenschnitt und gibt zusätzlich die beste, die
* schlechteste Note aus.
* Hans-Peter Habelitz
* 2011-12-22
*/

import java.text.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

/**
* This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
* Builder, which is free for non-commercial use. If Jigloo is being used
* commercially (ie, by a corporation, company or business for any purpose
* whatever) then you should purchase a license for each developer using Jigloo.
* Please visit [URL='http://www.cloudgarden.com']www.cloudgarden.com[/URL] for details. Use of Jigloo implies
* acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
* PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
* ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Notenbilanz extends javax.swing.JFrame {
    private JLabel jLabel1;
    private JButton jBtnAnzahlUebernehmen;
    private JLabel jLNote;
    private JButton jBtnNoteUebernehmen;
    private JLabel jLNotenschnitt;
    private JLabel jLSchlechtesteNote;
    private JButton jBtnEnde;
    private JButton jBtnNeu;
    private JLabel jLNotenzahl;
    private JLabel jLBesteNote;
    private JTextField jTFNote;
    private JTextField jTFNotenzahl;
    public DecimalFormat fzahl;
    public int notenzahl, i;
    public double summe, besteNote, schlechtesteNote, notenschnitt;

    /**
     * Auto-generated main method to display this JFrame
     */
    public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
       public void run() {
        Notenbilanz inst = new Notenbilanz();
        inst.setLocationRelativeTo(null);
        inst.setTitle("Notenliste");
        inst.setVisible(true);
       }
    });
    }

    public Notenbilanz() {
    super();
    initGUI();
    }

    private void initGUI() {
    try {
       setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
       getContentPane().setLayout(null);
       this.setPreferredSize(new java.awt.Dimension(408, 253));
       this.setTitle("Notenbilanz");
       {
        fzahl = new DecimalFormat("###,##0.00");
       }
       {
        jLabel1 = new JLabel();
        getContentPane().add(jLabel1);
        jLabel1.setText("Anzahl Noten");
        jLabel1.setBounds(6, 7, 89, 15);
       }
       {
        jTFNotenzahl = new JTextField();
        getContentPane().add(jTFNotenzahl);
        jTFNotenzahl.setBounds(6, 28, 41, 21);
       }
       {
        jBtnAnzahlUebernehmen = new JButton();
        getContentPane().add(jBtnAnzahlUebernehmen);
        jBtnAnzahlUebernehmen.setText("Übernehmen");
        jBtnAnzahlUebernehmen.setBounds(73, 28, 142, 21);
        jBtnAnzahlUebernehmen.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent evt) {
            jBtnAnzahlUebernehmenActionPerformed(evt);
           }
        });
       }
       {
        jLNote = new JLabel();
        getContentPane().add(jLNote);
        jLNote.setText("1.Note");
        jLNote.setBounds(6, 67, 47, 14);
        jLNote.setVisible(false);
       }
       {
        jTFNote = new JTextField();
        getContentPane().add(jTFNote);
        jTFNote.setBounds(6, 87, 41, 21);
        jTFNote.setVisible(false);
       }
       {
        jBtnNoteUebernehmen = new JButton();
        getContentPane().add(jBtnNoteUebernehmen);
        jBtnNoteUebernehmen.setText("Übernehmen");
        jBtnNoteUebernehmen.setBounds(73, 87, 142, 21);
        jBtnNoteUebernehmen.setVisible(false);
        jBtnNoteUebernehmen.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent evt) {
            jBtnNoteUebernehmenActionPerformed(evt);
           }
        });
       }
       {
        jLBesteNote = new JLabel();
        getContentPane().add(jLBesteNote);
        jLBesteNote.setBounds(6, 163, 365, 19);
       }
       {
        jLNotenschnitt = new JLabel();
        getContentPane().add(jLNotenschnitt);
        jLNotenschnitt.setBounds(6, 138, 365, 19);
       }
       {
        jLSchlechtesteNote = new JLabel();
        getContentPane().add(jLSchlechtesteNote);
        jLSchlechtesteNote.setBounds(6, 188, 365, 19);
       }
       {
        jLNotenzahl = new JLabel();
        getContentPane().add(jLNotenzahl);
        jLNotenzahl.setBounds(6, 118, 374, 14);
       }
       {
        jBtnNeu = new JButton();
        getContentPane().add(jBtnNeu);
        jBtnNeu.setText("Neue Berechnung");
        jBtnNeu.setBounds(240, 28, 140, 21);
        jBtnNeu.setVisible(false);
        jBtnNeu.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent evt) {
            jBtnNeuActionPerformed(evt);
           }
        });
       }
       {
        jBtnEnde = new JButton();
        getContentPane().add(jBtnEnde);
        jBtnEnde.setText("Ende");
        jBtnEnde.setBounds(279, 188, 94, 21);
        jBtnEnde.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent evt) {
            jBtnEndeActionPerformed(evt);
           }
        });
       }
       pack();
    } catch (Exception e) {
       e.printStackTrace();
    }
    }

    private void jBtnAnzahlUebernehmenActionPerformed(ActionEvent evt) {
    if (!jTFNotenzahl.getText().equals("")) {
       notenzahl = Integer.parseInt(jTFNotenzahl.getText());
       i = 1;
       summe = 0;
       besteNote = 6;
       schlechtesteNote = 0;
       jBtnAnzahlUebernehmen.setVisible(false);
       jTFNotenzahl.setEditable(false);
       jLNote.setVisible(true);
       jTFNote.setVisible(true);
       jBtnNoteUebernehmen.setVisible(true);
       jTFNote.requestFocus();
    } else {
       JOptionPane.showMessageDialog(null, "Anzahl der Noten eingeben!");
       jTFNotenzahl.requestFocus();
    }
    }

    private void jBtnNoteUebernehmenActionPerformed(ActionEvent evt) {
    if (!jTFNote.getText().equals("")
        && Double.parseDouble(jTFNote.getText()) >= 1
        && Double.parseDouble(jTFNote.getText()) <= 6) {
       summe = summe + Double.parseDouble(jTFNote.getText());
       notenschnitt = summe / i;
       jLNotenschnitt.setText("Notenschnitt: "
           + fzahl.format(notenschnitt));
       jLNotenzahl.setText("Anzahl eingegebene Noten: "
           + Integer.toString(i));

       if (Double.parseDouble(jTFNote.getText()) > schlechtesteNote) {
        schlechtesteNote = Double.parseDouble(jTFNote.getText());
        jLSchlechtesteNote.setText("schlechteste Note: "
            + Double.toString(schlechtesteNote));
       }
       if (Double.parseDouble(jTFNote.getText()) < besteNote) {
        besteNote = Double.parseDouble(jTFNote.getText());
        jLBesteNote
            .setText("beste Note: " + Double.toString(besteNote));
       }
       if (i == notenzahl) {
        notenschnitt = summe / notenzahl;
        jBtnNoteUebernehmen.setVisible(false);
        jBtnNeu.setVisible(true);
       } else {
        i++;
        jLNote.setText(Integer.toString(i) + ".Note");
        jTFNote.setText("");
        jTFNote.requestFocus();
       }
    } else {
       JOptionPane.showMessageDialog(null, "gültige Note eingeben!");
       jTFNote.requestFocus();
    }

    }

    private void jBtnNeuActionPerformed(ActionEvent evt) {
    i = 1;
    jLNote.setText(Integer.toString(i) + ".Note");
    summe = 0;
    besteNote = 6;
    schlechtesteNote = 0;
    jBtnAnzahlUebernehmen.setVisible(true);
    jTFNotenzahl.setEditable(true);
    jLNote.setVisible(false);
    jTFNote.setVisible(false);
    jTFNote.setText("");
    jBtnNoteUebernehmen.setVisible(false);
    jTFNotenzahl.setText("");
    jTFNotenzahl.requestFocus();
    jLNotenschnitt.setText("");
    jLBesteNote.setText("");
    jLSchlechtesteNote.setText("");
    jLNotenzahl.setText("");
    jBtnNeu.setVisible(false);
    }

    private void jBtnEndeActionPerformed(ActionEvent evt) {
    System.exit(0);
    }
}
```


----------



## JStein52 (3. Aug 2015)

Aber das hat doch nichts mit Java 8 oder 7 zu tun ??  Erkennt er nur den Neu nicht ?  Da muss irgendein anderer Fehler drinnen sein, hast du mal alle Klammern und Semikolon überprüft ?  Was genau passiert denn ?


----------



## Janericson (3. Aug 2015)

den Befehl:

jBtnNeuActionPerformed(evt);

erkennt Eclipse nicht.evt cannot be resolved to a variable kommt als fehlermeldung

aber scheinbar ging es ja im Buch


----------



## JStein52 (3. Aug 2015)

Ich habe mir mal deinen Sourcecode von oben 1:1 in mein NetBeans kopiert. Geht einwandfrei !! Und es sollte
ja nicht an NetBeans oder Eclipse liegen ! Und Ich habe auch Java 8 !  Bist du sicher dass du dich nicht verchrieben hast ??


----------



## Janericson (3. Aug 2015)

kann mich eig nicht verschrieben haben, da ich ja die Befehle selbst einfach kopiert habe. Dann muss es aber doch an Eclipse liegen, denn Netbeans habe ich bei mir nicht drauf. Hast du des Programm bei dir mit Eclipse schonmal gestartet?

Trotzdem schonmal Danke!


----------



## GoldenDarn (3. Aug 2015)

Ich hab das gerade mal in mein Eclipse rüberkopiert und bei mir kommt keine Fehlermeldung. Das Programm lässt sich auch einwandfrei starten und testen.


----------



## Janericson (3. Aug 2015)

ok wie gesagt vielen Dank für die Hilfe wenn du mir jetzt sagen könntest welche version von Eclipse du hast dann wärs echt geil


----------



## JStein52 (3. Aug 2015)

Ich habe es jetzt auch in Eclipse getestet. Funktioniert. Eclipse Juno, Version 4.2.2

Edit:  Ist das wg. evt die erste und einzige Meldung des Compilers ?  Du bist dir 100% sicher dass du dich nicht vertippt hast oder so was ? Es ist jedenfalls komisch dass er ausgerechnet diese ActionListener nicht versteht. Alle anderen sind ja exakt gleich aufgebaut.


----------



## JStein52 (3. Aug 2015)

Probiere es mal mit meiner java-Datei


----------



## Janericson (4. Aug 2015)

Danke nochmal an alle es geht jetzt, nachdem ich windows neu aufgesetzt und java und eclipse neu installiert habe


----------

