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.
bin noch ziemlich neu in Java. Also bitte entschuldigt diese blöde Frage.
Ich verstehe diese komische Konstruktion bei der Erstellung
eines Frames nicht.
Code:
public class win extends Frame
{
public win()
{
setSize( 500, 100 );
addWindowListener( new WindowAdapter() {
@Override
public void windowClosing ( WindowEvent e ) { System.exit( 0 ); }
} );
}
Wieso ist denn da bloß eine ganze Methode der Parameter von addWindowListener.
Und die andere Methode hat wiederum eine ganze Methode als Parameter.
???:L ???:L
Hab ich jetzt die ganze Syntax von Java nicht verstanden oder gibts das nur bei AWT ?
L-ectron-X hat diesen Beitrag am 17.10.2007 um 16:02 editiert. Titel des Themas angepasst.
zum einen hast du da
addWindowListener( objekt);
ganz normal im Grunde,
nur ist dieses Objekt besonders definiert,
statt new Klassenname() kann man überall in Java
new Klassenname() {
}
schreiben und hat dann ein Objekt einer abgeleiteten SubKlasse von der Klasse Klassenname
einfach nur ableiten ist natürlich witzlos, das macht man, um eine Operation zu überschreiben,
und deshalb ist in dieser 'anonymen inneren Klasse' noch die Operation windowClosing() neu definiert, überschrieben
Vielleicht hilft es dir zu verstehen wenn du das ganze etwas entzerter siehst. Das was in deinem Codebeispiel steht ist genau genommen nur eine verkürzte Schreibweise um sich eine extra Klasse "zu sparen" bzw. diese nicht extra definieren zu müssen.
Die Klasse win
Code:
public class win extends Frame
{
public win()
{
setSize( 500, 100 );
MyWindowAdapter wa = new MyWindowAdapter();
addWindowListener(wa);
}
}
Definition von MyWindowAdapter
Code:
public class MyWindowAdapter extends WindowAdapter {+
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
So aufgeteilt hast du eine Klasse MyWindowAdapter, die du selber anlegen musst um dann die Methode windowClosing daraus zu überschreiben. Um sich das anlegen der zusätzlichen Klasse (in der Form) zu sparen kann man das aber auch alles verkürzt machen und das sieht dann aus wie in deinem Beispiel:
Code:
public class win extends Frame
{
public win()
{
setSize( 500, 100 );
// Keine eigene Klasse anlegen
// MyWindowAdapter wa = new MyWindowAdapter();
// new WindowAdapter() legt jetzt ein Objekt der Klasse WindowAdapter an
addWindowListener(new WindowAdapter() {
@Override
// Hier wird von WindowAdapter die Methode windowClosing überschrieben
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}