// Weihnachtsbaum.java // Ein Bäumchen als Fenster // Vorlage für weitere Aufgaben ab Übung 8 // // (C) Klaus Knopper 2010 // Lizenz: GPL V2 import java.awt.*; // Graphics, Frame etc. import java.awt.event.*; // *Listener // Ein Weihnachsbäumchen als Frame, damit können wir ein Fenster mit Inhalt // einfach durch new Weihnachtsbaum() erscheinen lassen. public class Weihnachtsbaum extends Frame implements WindowListener,MouseListener,MouseMotionListener { // Polygonzug für Baumkrone private static final int[] bkx = {30,20,25,15,20,10,15,5,55,45,50,40,45,35,40,30}; private static final int[] bky = {22,32,32,42,42,52,52,62,62,52,52,42,42,32,32,22}; private static final Polygon bk = new Polygon(bkx,bky,16); // Polygonzug für Stamm private static final int[] bsx = {29,29,20,20,40,40,31,31}; private static final int[] bsy = {62,72,72,74,74,72,72,62}; private static final Polygon bs = new Polygon(bsx,bsy,8); public Weihnachtsbaum(){ // Konstruktor ohne Parameter... this(true); // ruft Konstruktor MIT Parameter auf. [ Weihnachtsbaum(true) ] } // Konstruktor mit Parameter // wird "rahmen" auf "false" gesetzt, dann bekommen wir ein Fenster ohne // Titelleiste und Dekoration. public Weihnachtsbaum(boolean rahmen){ if(rahmen == false) setUndecorated(true); setSize(60,80); // Kleine Fenstergröße setResizable(false); // Fenster zufällig irgendwo auf dem Bildschirm // positionieren. // Die Bildschirmgröße ist // Window.getToolkit().getScreenSize().{width,height} int screenWidth = getToolkit().getScreenSize().width; int screenHeight = getToolkit().getScreenSize().height; setLocation((int)(Math.random()*(double)(screenWidth-60)), (int)(Math.random()*(double)(screenHeight-80))); // Zufällige Position setVisible(true); // Fenster sichtbar machen. paint(this.getGraphics()); // Reinzeichnen, Methode paint() siehe unten. addMouseMotionListener(this); // Mausbewegungen (im Fenster) abhören addMouseListener(this); // Mausklicks (im Fenster) abhören addWindowListener(this); // Schließen-Button } // paint() sollte immer aufgerufen werden, wenn der Fensterinhalt // durch Überdeckung oder Iconifizieren zerstört wurde, und wieder // neu aufgebaut werden soll. public void paint(Graphics g) { // 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); g.setColor(Color.black); g.drawPolygon(bs); } // Klick auf "Schließen"-Button schließt das Fenster public void windowClosing(WindowEvent e) { dispose(); } // Mausklick ins Fenster schließt das Fenster ebenfalls. public void mouseClicked(MouseEvent e) { dispose(); } // Fenster wurde wiederhergestellt, Inhalt neu zeichnen. public void windowDeiconified(WindowEvent e) { paint(this.getGraphics()); } // Diese Events kommen aus WindowListener, MouseListener und MouseMotionListener, und // werden erst mal ignoriert. public void windowOpened(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} }