# ActionListener zwei Buttons zuweisen



## Ci (20. Jun 2011)

Hallo,

hat jemand ne Idee, weshalb ich diese Fehler bekomme, die ich im Code kommentiert hab?
Ich möchte wie im Überschrift erwähnt, zwei Buttons separat den ActionListener zuweisen.

Bin leider nicht so fit im programmieren und bin mir deshalb nicht so sicher was ich in meinem Code falsch gemacht hab! hof mir kann jmd. helfen.

gruß


```
/*hier die ganze Gui Klasse mit den einzelnen Fehlermeldungen! Wenn ich die einzelnen Buttons
  mit ActionListener bestücke, dann werd ich von Fehlermeldungen überschüttet.
  Mit der anderen Variante funktioniert alles einwandfrei, also wenn mein ActionListener schon
  in der Zeile: class GUI_ATR extends JFrame implements ActionListener{ implementiert ist!
  Nur brauch ich das ja nicht in der Form :(
  hoff du kannst mir bei den Fehlermeldungen helfen. gruß*/
 
package getATR;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import javax.smartcardio.CardException;
import javax.swing.*;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class GUI_ATR extends JFrame{
       
        // Meine Button
        public static JButton daten_pruefen = new JButton();
        public static JButton pruefung_abschließen = new JButton();
       
       
        public static JLabel lblKartennr = new JLabel("* Karten-Nr.:");
        public static JFormattedTextField txtFKartennr;
 
        public static JTextArea textArea = new JTextArea();
        private final JScrollPane scrollPane = new JScrollPane();
       
        static File f;
        static String path_f;
        static int returnVal;
       
        public void gui_leeren() {
               
                // um mein Textfeld zu leeren
                textArea.setText("");
                lblKartennr.setVisible(false);                                 
                txtFKartennr.setVisible(false);
               
        }     // Fehlermeldung Multiple markers at this line. Syntax error on token "}",
              // delete this token ...versteh aber nicht warum!
              // Ich schließ hier meine Klammer ganz normal, deshalb bin ich etwas verwirrt!
       
       
 
        /////////////////////////////////////////////////
        // Daten prüfen Button
        /////////////////////////////////////////////////
        daten_pruefen.addActionListener(new ActionListener(){  
        public void actionPerformed(ActionEvent e) {
                open_terminal();
                karteninhalt_auslesen.init_log_command_list();
                if (e.getSource() == this.daten_pruefen) {    //Fehlermeldung "daten_pruefen can't be resolved or is not a field"
                        gui_leeren();
                        open_terminal();
                        if (Connect_Terminal.isTerminal_present() == true) {
                                open_card();
                                if (Connect_Card.isCard_present() == true) {
                                       
                                       
                                        lblKartennr.setVisible(true);
                                        txtFKartennr.setVisible(true);
                                        init_osVersion();
                                        try {
                                               
                                                //Karteninhalt ausgeben
                                                karteninhalt_auslesen.ausgabe_auswahl();
                                       
                                        } catch (CardException e1) {
                                                e1.printStackTrace();
                                        }
                                       
                                } else {
                                        GUI_ATR.textArea.append("Keine Karte vorhanden");
                                       
                                }
                        } else {
                                GUI_ATR.textArea.append("Chipkartenleser ist nicht eingesteckt");
                        }
                }
        }
        });
               
               
                /////////////////////////////////////////////////
                // Prüfung abschließen Button
                /////////////////////////////////////////////////
       
                pruefung_abschließen.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
                if (e.getSource() == this.pruefung_abschließen) {  //Fehlermeldung "pruefung_abschließen can't be resolved or is not a field"
               
                        gui_leeren();
                        open_terminal();
                       
                        GUI_ATR.textArea.append("...Formular geleert!");
                }              
        }
        });  // Fehlermeldung "Syntax Error"
       
       
       
       
        public static void init_osVersion() {
                Inhalt_ATR.init_ATR();
                Inhalt_ATR.convert_atr();
                Inhalt_ATR.init_all_Maps();
                Inhalt_ATR.set_all_Variables();
        }
       
 
        public static void open_terminal() {
                Connect_Terminal.create_factory();
                try {
                        Connect_Terminal.create_terminals(0);
                } catch (CardException e2) {
                        textArea.append(e2.toString());
                } catch (Exception e2) {
                        textArea.append(e2.toString());
                }
        }
 
        public static void open_card() {
                try {
                        Connect_Card.newCard();
                } catch (CardException e1) {
                        GUI_ATR.textArea.append(e1.toString());
                }
        }
 
        public static void File_chooser() throws IOException {
                JFileChooser fc = new JFileChooser();
                fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                returnVal = fc.showOpenDialog(null);
 
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                        setF(fc.getSelectedFile());
                        // System.out.println(f.getPath());
                        setPath_f(f.getPath());
                }
        }
 
        public static File getF() {
                return f;
        }
 
        public static void setF(File f) {
                GUI_ATR.f = f;
        }
 
        public static String getPath_f() {
                return path_f;
        }
 
        public static void setPath_f(String path_f) {
                GUI_ATR.path_f = path_f;
        }
 
        public GUI_ATR() {
                setTitle("TEST");
               
                this.setVisible(true);
                setSize(1010, 532);
                setLocation(150, 100);
                setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
                JPanel panel = new JPanel();
                getContentPane().add(panel);
                panel.setLayout(null);
               
                // Daten prüfen Button
               
                panel.add(daten_pruefen);
                daten_pruefen.setSize(70, 35);
                daten_pruefen.setLocation(5, 5);
                daten_pruefen.setText("<html>Daten<br>pruefen</html>");
       
                // Prüfung abschließen Button
               
                panel.add(pruefung_abschließen);
                pruefung_abschließen.setSize(95, 35);
                pruefung_abschließen.setLocation(350, 5);
                pruefung_abschließen.setText("<html>Pruefung<br>abschliessen</html>");
 
                // Karten-Nr.:
                lblKartennr.setBounds(458, 259, 81, 14);
                panel.add(lblKartennr);
                lblKartennr.setVisible(false);
               
                txtFKartennr = new JFormattedTextField();
                txtFKartennr.setBounds(579, 256, 100, 20);
                panel.add(txtFKartennr);
                txtFKartennr.setVisible(false);
               
                // Text Area
               
                scrollPane.setBounds(5, 45, 440, 455);
                panel.add(scrollPane);
                scrollPane.setViewportView(textArea);
               
               
                addWindowListener(new meinWindowListener());
               
                /* ist hier mein ...addActionListener(this) richtig platziert?*/
                //----------------------------------------------------------//
                daten_pruefen.addActionListener(this);
                pruefung_abschließen.addActionListener(this);
                //----------------------------------------------------------//
               
                /* Fehlermeldung in den beiden Zeilen: " The method addActionListener(ActionListener)
                 * in the typ AbstractButton is not applicable for the arguments (GUI_ATR)
                 * */
        }
 
        public class meinWindowListener extends WindowAdapter {
                public void windowClosing(WindowEvent a) {
                        System.exit(0);
                }
        }
}
```


----------



## SlaterB (20. Jun 2011)

> daten_pruefen.addActionListener(new ActionListener(){ usw,
ist keine Variablendeklaration, darf deshalb nicht direkt in der Klasse stehen sondern gehört in eine Methode,

die Fehlermeldung von Java ist da in der Tat kontraproduktiv,will die korrekte Klammer davor verschieben..

andere Fehler sind eigentlich recht leicht, die Klasse selber ist kein ActionListener, kann also nicht also solcher übergeben werden,
eine statische Variable x kann nicht mit this.x angesprochen werden


----------



## Ci (20. Jun 2011)

muss ich meine Buttons nicht in einen Konstruktor packen?


```
public void GUI_ATR(){
.
.
}
```

also grad die zwei Zeilen:


```
public static JButton daten_pruefen = new JButton();
        public static JButton pruefung_abschließen = new JButton();
```


wenn ja, wie kann ich das programmiertechnisch beweltigen?


----------



## XHelp (20. Jun 2011)

Warum überhaupt alles static? :bahnhof:


----------



## SlaterB (20. Jun 2011)

> muss ich meine Buttons nicht in einen Konstruktor packen?

mache es so wenn du es für richtig hälst

> wenn ja, wie kann ich das programmiertechnisch beweltigen? 

schau dir irgendwelche GUI-Programme auf der Welt an, in den meisten Fällen haben die eh einen überfüllten Konstruktor,
wobei das im Grunde auch absolute Java-Grundlagen sind, eine Variable deklarieren und später ihr etwas zuweisen,
wenn du das nicht weißt was machst du dann hier bei GUIs? meine Zeit möchte ich auch nicht verschwenden


----------



## Ci (20. Jun 2011)

bestimmte Funktionene werden ausgeführt, wenn ich auf Daten prüfe Button click, diese Funktionen sind in ner anderen Klasse! wenn ich *static*  weglasse, dann bringt er mir die Fehlermeldung:

_Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
	Cannot make a static reference to the non-static field GUI_ATR.daten_pruefen_

ist es schlimm wenn ich stehen hab?
anders funktionierts ja nicht


----------



## SlaterB (20. Jun 2011)

Gegenfrage:
du greifst in deinem Programm auf die andere Klasse JTextArea zu,
würdest du JTextArea.setText() schreiben, käme die Fehlermeldung

Unresolved compilation problem:
Cannot make a static reference to the non-static method JTextArea.setText()

ist die einzige Lösung nun, die komplette Java-API auszutauschen um diese Methode static zu machen oder gibt es noch andere Wege?


----------



## Ci (20. Jun 2011)

keine Ahnung! Wie gesagt, bin nicht so fit im programmieren!

JTextArea ist nicht die andere Klasse, sondern nur ein Textfeld. aber es wird in der anderen Klasse auch benutzt! Denn in meiner anderen Klasse gebe ich die Daten direkt im Textfeld aus!

unzwar mit: 
	
	
	
	





```
GUI_ATR.textArea.append("blabla:" + getTypname());
```


----------



## SlaterB (20. Jun 2011)

die richtige Lösung wäre nicht direkt mit der Klasse zu arbeiten sondern mit einem bestimmten Objekt der Klasse,
naja, unendliche Aufgabe wohl diese Hilfe


----------



## Ci (20. Jun 2011)

also statt immer _GUI_ATR.textArea...._ in meiner GUI_ATR Klasse ein Objekt anlegen und damit meine Ausgabe aus der anderen Klasse ausgeben lassen?!
...um so quasi unabhängig von der GUI_ATR Klasse zu sein, versteh ich das richtig?


----------



## SlaterB (20. Jun 2011)

es geht um den Zugriff auf die GUI von einer anderen Klasse aus, da scheint grundsätzlich 'in meiner GUI_ATR Klasse ein Objekt anlegen' ein falsches Thema zu sein,
'unabhängig von der GUI_ATR Klasse zu sein' ist mir genauso unverständlich, 
wenn ich einen Apfel will dann will ich doch nicht unabhängig von einem Apfel sein

eine andere Klasse will auf die GUI zugreifen, also braucht sie das GUI-Objekt, nicht nur die Klasse, fertig


----------



## Ci (20. Jun 2011)

alles klar. die Klasse nicht, aber das Objekt schon!

verstanden  danke


----------

