Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich möchte durch Auswahl eines MenüItems (item2) einen Text in eine Textarea einfügen lassen. Um zu versuchen, ob meine Codes stimmen habe ich folgendes gemacht:
Code:
public Projekt()
...
textarea.setText( "text1" );//Text wird in Textarea gesetzt, nur zum Test
item1.addActionListener
(
new ActionListener()
{
public void actionPerformed( ActionEvent event )
{
System.exit( 0 );
}
}
);
item2.addActionListener
(
new ActionListener()
{
public void actionPerformed( ActionEvent event )
{
//gleiche Funktion wie bei item1 (nur zum Test)
System.exit( 0 );
}
}
);
...
Bei obigem Code wird der Text in die Textarea reingesetzt. Wenn ich nun aber den Text erst bei Auswahl des MenüItems 2 reinsetzen möchte sieht mein Code so aus:
Code:
public Projekt()
...
//hier habe ich den Code entfernt...
item1.addActionListener
(
new ActionListener()
{
public void actionPerformed( ActionEvent event )
{
System.exit( 0 );
}
}
);
item2.addActionListener
(
new ActionListener()
{
public void actionPerformed( ActionEvent event )
{
textarea.setText( "text1" );//... und hier habe ich den Code reingesetzt
}
}
);
...
Mit diesem Code bekomme ich aber die Fehlermeldung "local variable textarea is accessed from within inner class; needs to be declared final textarea.setText( "text1" );"
Was ist damit gemeint? Wo liegt mein Denkfehler bzw. was muss ich machen, damit das funktioniert?
Es wäre klasse, wenn sich jemand die Mühe macht, mir zu helfen. Vielen Dank schon mal.
Du musst einfach die Referenz textarea zusätzlich noch mit final deklarieren und es sollte laufen!
Ich empfehle dir allerdings, deine Klasse einen ActionListener implementieren zu lassen... Dann hast du das Problem mit final Deklarationen nicht
Code:
public class Klasse implements ActionListener{
...
public Klasse(){
item1.addActionListener(this);
item2.addActionListener(this);
}
...
public void actionPerformed(ActionEvent evt){
Object o = evt.getSource();
if(o.equals (item1)){
...
}else if(...){
...
}
}
}
Ähm du weisst aber, dass das genau das ist was ich gepostet hab, oder?
ob jetzt if oder else if spielt überhaupt keine Rolle solange man sicher gehen kann, dass zwei Referenzen nicht auf ein Objekt auf dem Heap zeigen...