Textfeld in Label schreiben - Cannot find symbol

Hey, ich habe 2 Javadateien, einmal Aktion und einmal Visualisieren.

Quellcode von Aktion:

import java.awt.*;
import java.awt.event.*;

public class Aktion implements ActionListener {

Aktion() {
}

public void actionPerformed(ActionEvent ae) {
la.setText( "Der eingelesene Text lautet: " + tf.getText() );
}
}

Quellcode von Visualisieren:

import java.awt.*;
import java.awt.event.*;

class Visualisierung {
public static void main (String[] argv) {

Frame f=new Frame();
f.setSize(500,200);
f.setLocation(100,100);
f.setVisible(true);

Button bt=new Button(„Dont klick me“);
TextField tf=new TextField();
Label la=new Label();

f.add(bt,„Center“);
f.add(tf,„North“);
f.add(la,„South“);

Aktion at=new Aktion();
bt.addActionListener(at);
}
}

Fehlermeldung:

Aktion.java:10: cannot find symbol
symbol : variable tf
location: class Aktion
la.setText( "Der eingelesene Text lautet: " + tf.getText() );
^
Aktion.java:10: cannot find symbol
symbol : variable la
location: class Aktion
la.setText( "Der eingelesene Text lautet: " + tf.getText() );
^
2 errors

Warum geht das nicht, ich habe „tf“ und „la“ doch definiert.

Grüße Morslord

Warum geht das nicht, ich habe „tf“ und „la“ doch definiert.

Aber in zwei unterschiedlichen Klassen. Und selbst in einem anonymen ActionListener müsste das Feld immer noch final sein, um im ActionListener darauf zugreifen zu können.

Und dein

-Tag ist kaputt.

Aktion.java:10: cannot find symbol
symbol : variable la
location: class Aktion

Das liegt daran das der ActionListener (Action-Klasse) nur seine Varablen usw. „sieht“ und die Variabel „la“ gehört der Klasse Visualisierung.

Die Quick und Dirty Lösung wäre:

Quellcode von Aktion:
-----------------------------
import java.awt.\*;
import java.awt.event.\*;

public class Aktion implements ActionListener 
{
 private Visualisierung visual;

 Aktion(Visualisierung visual)
 {
 this.visual = visual; 
 }

 public void actionPerformed(ActionEvent ae)
 {
 visual.getLa().setText( "Der eingelesene Text lautet: " + visual.getTf().getText();
 )
}

und die Klasse Visualisierung muss umgestricken:

  1. die Klasse Visualisierung umbenennen.

  2. alles was in der Main-Methode ist, sollte in einer eigenen neuen Klasse Visualisierung

  3. in der neuen Klasse Visualisierung sind die Variablen „tf“, „la“ und „bt“ Instanzvariablen mit entsprechenden Gettern/Settern.
    4)deine Klasse mit der Main-Methode sollte in etwa so aussehen:

    class VisualMain
    {
    public static void main (String[] argv)
    {
    Visualisierung visual = new Visualisierung();
    Action action = new Action(visual);
    visual.getBt().addActionListener(action);
    }
    }

Danke für die Antworten, leider klappt es immer noch nicht, weil er jetzt sagt er kennt die methode getText() und setText() nicht.

Grüße Morslord

Natürlich nicht, da deine Klasse Visualisierungen die Methoden nicht besitzt. Implemiere sie selbst:

import java.awt.*;
import java.awt.event.*;

class Visualisierung {

TextField tf;
Label la

public static void main (String[] argv) {

Frame f=new Frame();
f.setSize(500,200);
f.setLocation(100,100);
f.setVisible(true);

Button bt=new Button(„Dont klick me“);
tf=new TextField();
la=new Label();

f.add(bt,„Center“);
f.add(tf,„North“);
f.add(la,„South“);

Aktion at=new Aktion();
bt.addActionListener(at);
}

String getText() {
return tf.getText();
}

void setText(String s) {
la.setText();
}
}

Funktioniert nicht, ist jetzt auch egal, aber trotzdem danke.