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.
liegt (muss ja) in irgendeiner Methode.
Da kannst du nicht "drinnen" eine neue Methode definieren.
Die gehört als Klassenmethode an andere Stelle.
Sagt er ja:
Code:
misplaced
! (Meist sind die Fehlermeldugnen wörtlich zu nehmen!)
tuWas.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent j)
{
System.out.println("tu was Methode");
tuWas x = new tuWas();
x.test();
}
});
Was ist denn bei dir "TuWas" ? Du erstellst ja von "TuWas" ein Objekt, und greifst auf auf die Klassenmethode "test" zu. Dabei hast du diesem "TuWas" ein ActionListener zugeordnet. Wenn "TuWas" ein JButton wäre, könntest du zwar eine Instanz erstellen, aber mit "x.test" keine Klassenmethode aufrufen, des Weiteren müsstest du die Methode als "public" oder "protected" deklarieren, da du versuchst von einer Unterklasse eine so gesehen nicht sichtbare Methode aufzurufen.
Vielleicht so !?
Java:
public class Boo {
JButton tuwas = new JButton();
tuWas.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent j)
{
System.out.println("tu was Methode");
Boo x = new Boo();
x.test();
}
});
public void test() // oder protected
{
System.out.println("test Methode");
}
)};
}
Also entweder verstehe ich euch alle falsch oder ihr habt Java nicht verstanden...
tuWas.addActionListener(...) macht NICHTS unmittelbar. Das einzige, was es macht, ist, ein Objekt zu übergeben mit der Anweisung, dass wenn etwas Bestimmtes geschieht (ActionEvent), die Methode in diesem Objekt aufzurufen ist (actionPerformed). Wenn dieses Bestimmte (ActionEvent) nicht geschieht, wird die Methode nie aufgerufen.
Anonyme Unterklassen sind keine Methoden (@AquaBall). Ein Listener ist ein Interface und wenn du einen neuen ActionListener erzeugst, erzeugst du eine neue Klasse, die allerdings im Nirvana verschwindet (du nicht mehr auf sie zugreifen kannst außer über
Code:
tuWas.getActionListeners()[0];
).
Java:
public class Boo {
JButton tuwas = new JButton();
tuWas.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent j)
{
System.out.println("tu was Methode");
Boo x = new Boo();
x.test();
}
});
public void test() // oder protected
{
System.out.println("test Methode");
}
)};
}
Okay, nochmal zum Mitschreiben:
new ActionListener(){ ... }; erzeugt eine Klasse, die von ActionListener erbt. In diese Klasse kannst du ALLES reinschreiben, was du sonst auch in Klassen reinschreiben kannst.
Der private Modifier ist innerhalb eines java class Files unerheblich!!
Diese Syntax ist absolut falsch. Die Methode test() ist in der anonymen Klasse des ActionListeners definiert und nicht in der Klasse Boo!
Richtig ist es entweder so:
Java:
class Boo {
JButton tuwas = new JButton();
tuWas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent j) {
System.out.println("tu was Methode");
test();
}
private void test(){
System.out.println("Test Methode");
}
});
}
ODER:
Java:
public class Boo {
JButton tuwas = new JButton();
tuWas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent j) {
System.out.println("tu was Methode");
Boo x = new Boo();
x.test();
}
});
private void test(){
System.out.println("Test Methode");
}
}
Danke für die Aufmerksamkeit!
E: An hui... Nächstes Mal bitte auf Syntax und evtl auch Formatierung achten. Ich habe erst jetzt gesehen, dass du deine Methode anscheinend außerhalb (also wie bei meiner 2. Variante) gedacht hattest. Allerdings ist da ein ")};" zu viel!
Stimmt, normalerweise achte ich immer genau auf Formatierung und Stil, jedoch habe ich den vorherigen Code zum bearbeiten einfach kopiert und die Formatierung nicht mehr geändert. Das ich ein
Java:
)};
zu viel habe, habe ich wohl übersehen. Natürlich sollte die Methode innerhalb der Klasse Boo landen und nicht innerhalb des Action Listeners
Demnächst schau ich dreimal auf den Quelltext, bevor ich ihn poste