// Der Weihnachtsbaum soll von Klasse Frame erben, // damit lässt er sich wie ein Frame behandeln und // enthält auch alle Frame-Funktionen wie z.B. // setVisible(boolean) oder dispose(). import java.awt.*; // Frame, Graphics usw. importieren import java.awt.event.*; // Event-Klassen wie WindowListener // Wir fügen ein Event-Interface ein, das sich um // BenutzerAktionen kümmert: "implements WindowListener"! public class Weihnachtsbaum extends Frame implements WindowListener // Fenster-Knöpfe Aktionen { public static void main(String[] args) { System.out.println("main: start"); new Weihnachtsbaum(); System.out.println("main: ende"); } // Wir bauen alle Funktionen, um den Weihnachtsbaum // zu "erzeugen", in den Konstruktor! public Weihnachtsbaum() { setSize(600,740); // aus Frame-Klasse setVisible(true); // aus Frame-Klasse // Fenster-Aktionen mit Fenster verknüpfen addWindowListener(this); } // Funktion zum Baum zeichnen void drawTree(Graphics g) { // Polygonzug für Baumkrone final int[] bkx = {300,200,250,150,200,100,150,50,550,450,500,400,450,350,400,300}; final int[] bky = {220,320,320,420,420,520,520,620,620,520,520,420,420,320,320,220}; final Polygon bk = new Polygon(bkx,bky,16); // Polygonzug für Stamm final int[] bsx = {290,290,200,200,400,400,310,310}; final int[] bsy = {620,720,720,740,740,720,720,620}; final Polygon bs = new Polygon(bsx,bsy,8); // Zeichnen! // Polygonzug mit grüner Füllung (Baumkrone) g.setColor(Color.green); g.fillPolygon(bk); // Umrandung g.setColor(Color.black); g.drawPolygon(bk); // Polygonzug mit brauner Füllung (Stamm) g.setColor(Color.red); g.fillPolygon(bs); // Umrandung g.setColor(Color.black); g.drawPolygon(bs); } // Diese 7 Funktionen müssen wegen "implements WindowListener" // programmiert werden! Sie dürfen aber durchaus // "leer" sein. public void windowClosing(WindowEvent e) { // Wird ausgeführt, wenn Benutzer auf "Schließen" klickt. System.out.println("Schließen-Button wurde gedrückt"); // new Weihnachtsbaum(); // neues Fenster öffnen dispose(); // Schließt das Fenster } public void windowClosed(WindowEvent e) { System.out.println("Fenster wurde geschlossen."); } public void windowOpened(WindowEvent e) { // Baum ins Fenster zeichnen // getGraphics() wird aus der Basisklasse Frame // direkt aufgerufen! System.out.println("Fenster wurde geöffnet."); drawTree( getGraphics() ); } public void windowIconified(WindowEvent e) { System.out.println("Fenster wurde minimiert."); } public void windowDeiconified(WindowEvent e) { System.out.println("Fenster wurde restauriert."); drawTree( getGraphics() ); } public void windowActivated(WindowEvent e) { System.out.println("Fenster wurde aktiviert."); drawTree( getGraphics() ); } public void windowDeactivated(WindowEvent e) { System.out.println("Fenster wurde deaktiviert."); } }