Grundlagen Event Handling

enrix

Mitglied
Hallo Leute,
ich habe eine Klasse für mein Formular geschrieben und eine Klasse für das EventListening.

Hier ein Ausschnitt aus dem Layoutmanager.

Code:
But.addActionListener(new FormListener());
        c = build_c(0,4,1,1,20,0);
        c.fill=GridBagConstraints.LINE_START;
        L.setConstraints(But, c);
        add(But);

Hier zu sehen mein FormListener:
Code:
public class FormListener implements ActionListener {

    private Form Form1;

    public void actionPerformed(ActionEvent arg0) {
        if(arg0.getSource()== Form1.But){
            String s= Form1.Edit1.getText();
            System.out.println(s);
        }
        
    }

}

Leider funktioniert diese Art und Weise des Event-Handlings nicht. Wie kann ich in der If-Bedingung feststellen ob der Butten aus dem Formular aktiviert wurde?
 
meine frage ist, kann ich auch ohne ein Form-Objekt zu erzeugen kontrollieren ob der Button "But" getätigt wurde?

denn ein objekt dieses Formulars wird ja schon in der main erzeugt.

oder gibt es für solche fälle ei ganz anderes verfahren?
 
Hallo enrix,

richt ja ein bisschen nach Aufgabenblatt :)

Vorab eine Anmerkung equals und == sind nach das Gleiche. Lies mal hier nach.

Was bekommst Du denn als Ausgabe, wenn du in deinem Code wie folgt ergänzt?
Code:
public class FormListener implements ActionListener {
    private Form Form1;
    public void actionPerformed(ActionEvent arg0) {
        System.out.println(arg0.getSource().getClass());
        System.out.println(arg0.getSource());
        if(arg0.getSource()== Form1.But){
            String s= Form1.Edit1.getText();
            System.out.println(s);
        }        
    }
}

Gruß Sen
 
Hallo Sentoo, danke für die schnelle Antwort,
ja ist eine Hausaufgabe zu Dienstag. Hab den Aufwand mit dem EventHandling unterschätzt. Jetzt muss ich da durch :offtopic:
ich bekomme als ausgabe
Code:
class javax.swing.JButton
javax.swing.JButton[,84,352,96x29,alignmentX=0.0,alignmentY=0.5,border=apple.laf.CUIAquaButtonBorder$Dynamic@8dfef8,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=2,bottom=0,right=2],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Einlesen,defaultCapable=true]
 
hey, ich habe das jetzt so lösen können da mein Button die Bezeichnung Einlesen bekommen hat

Code:
 public void actionPerformed(ActionEvent arg0) {
          System.out.println(arg0.getSource().getClass());
        System.out.println(arg0.getSource());
        if(arg0.getActionCommand().equals("Einlesen")){
            String s= "hallo";
            System.out.println(s);
        }else{
            System.out.println("das hat nicht geklappt");
        }
    }


ist zwar ne coole sache. aber es könnte ja vorkommen dass zwei unterschiedliche buttons den gleichen actionCommand tragen. deshalb ist diese Lösung nur second-best
 
Du könntest deinem Objekt vom Typ FormListener eine Referenz auf den Button spendieren. Diese Beziehung würde ich zur Erstellzeit, am Besten per Konstruktor, herstellen.

Sprich, dein Ansatz mit dem private Form Form1 ist gar nicht so falsch, aber nicht ganz korrekt ausgeführt. Das Attribut muss irgendwoher eine Referenz zugewiesen bekommen.

Gruß Sen
 
hey, ich habe das jetzt so lösen können da mein Button die Bezeichnung Einlesen bekommen hat

Code:
 public void actionPerformed(ActionEvent arg0) {
          System.out.println(arg0.getSource().getClass());
        System.out.println(arg0.getSource());
        if(arg0.getActionCommand().equals("Einlesen")){
            String s= "hallo";
            System.out.println(s);
        }else{
            System.out.println("das hat nicht geklappt");
        }
    }
ist zwar ne coole sache. aber es könnte ja vorkommen dass zwei unterschiedliche buttons den gleichen actionCommand tragen. deshalb ist diese Lösung nur second-best


Moin,

diese Lösung wird hier meinen Projekten auch regelmäßig genutzt! Sieh' einfach zu, dass die jeweiligen ActionCommands eindeutig sind (zumindest im jeweiligen Kontext) :)

Gruß
Klaus
 
Zurück