Klassen Variablen von einer Klasse zur anderen

Putenpizza

Mitglied
Guten Abend,
Ich lerne derzeit Java von dem Youtuber TheNewBoston und bin nun auf das Kapitel GUI gestoßen. Ich habe ein Fenster erstellt, zwei Textfelder und ein Passwortfield, dass ganze habe ich dann versucht mit der ActionListener klasse zu verknüpfen. Das ganze sie soweit so aus:
Java:
[
package test;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import java.awt.FlowLayout;

public class Test1 extends JFrame{
   
    private JTextField item1;
    private JTextField item2;
    private JPasswordField pField;
   
    public Test1 (){
       
        super("Mein Programm");
        setLayout(new FlowLayout());
       
        item1 = new JTextField("Enter your Name Here",15);
        add(item1);
        item2 = new JTextField("Enter your Age Here",15);
        add(item2);
        pField = new JPasswordField(10);
        add(pField);
       
        Test2 handler = new Test2();
        item1.addActionListener(handler);
        item2.addActionListener(handler);
        pField.addActionListener(handler);
    }
}
]
Das Problem aber ist das die ActionListener Klasse die Variablen item1, item2 und pFiel nicht kennt. Das ist auch klar, weil diese in der Klasser nicht definiert wurden, bei dem Youtuber allerdings funktioniert es, ich weiß nicht ob es daran liegt, weil er das alles in einem Dokument geschrieben hat aber es klappt.
Java:
[
package test;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;

public class Test2 implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent event){
        String string = "";
       
        if(event.getSource() == item1){
            string = String.format("Your name is %s", event.getActionCommand());
        }else if (event.getSource() == item2){
            string = String.format("Your age is %s", event.getActionCommand());
        }else if (event.getSource() == pField){
            string = String.format("Your password is %s", event.getActionCommand());
        }
       
        JOptionPane.showMessageDialog(null, string);
    }
]
Mein Frage an euch ist es nun, wie ich die drei Variablen in die andere Klasse übertragen kann.
Vielen Dank für eure Hilfe 🙂
 
event.getSource() benutzt du doch schon - das gibt dir die Komponente zurueck auf der das Ereignis ausgeloest wurde. Der Rueckgabetyp ist allerdings Object, also musst du einen Cast ausfuehren, um an die Eingabe zu gelangen:
Code:
String eingabe = ((JTextField)event.getSource()).getText();
Allerdings hast du verschiedene Typen verwendet, deshalb erstmal testen:
Code:
if(event.getSource() instanceof JTextField) {
    ...
}
Andy
 
Das Problem aber ist das die ActionListener Klasse die Variablen item1, item2 und pFiel nicht kennt. Das ist auch klar, weil diese in der Klasser nicht definiert wurden, bei dem Youtuber allerdings funktioniert es, ich weiß nicht ob es daran liegt, weil er das alles in einem Dokument geschrieben hat aber es klappt.
Dieser besagte Youtuber hat eine innere Klasse(private class) im selben .java File kreiert und somit Zugriff auf die umgebenden Variablen.
 
Jetzt funktioniert es. Den Fehler, den ich gemacht habe war, dass ich die ActionListener Klasse außerhalb der Test1 Klasse kreiert habe. Aber als Flown sagte "innere Klasse" hats bei mir klick gemacht.
Danke für eure Hilfe! 🙂
 
Trotzdem noch ein paar Tipps. Der Youtuber ist jetzt nicht gerade was man das "gelbe vom Ei" nennt.

- ActionListener werden meist anonym angelegt, da sie keinen State haben und nur für eine Aufgabe und eine Komponente sind (=> dann spart man sich die blöden Abfragen mit e.getSource() == ???)
- Man erbt nicht von JFrame, wenn man die Funktionalität nicht erweitert!!!!
- Klassen werden immer groß geschrieben im UpperCamelCase-Stil!
- Es werden nur Felder angelegt, wenn man diese auch wieder verwenden will und als State hat!

Das wars schon mal mit den wichtigsten Tipps. Bleib aber bitte trotzdem am Ball, versuch mehrere Tutorials/Bücher durchzuarbeiten.
 

Zurück
Oben