next up previous contents
Nächste Seite: Mandelbrot-Menge Aufwärts: Grafik Vorherige Seite: Fadengrafik   Inhalt

Rechtecke und Kreise zeichnen

Im folgenden Beispiel sollen Rechtecke und Kreise gezeichnet werden. RadioButtons legen fest, ob sie vollflächig oder nur ihr Rahmen dargestellt werden sollen.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;

public class FarbKlecks extends JFrame implements ActionListener, ItemListener {

    boolean rechteckezeichnen = false;
    boolean kreisezeichnen = false;
    boolean vollzeichnen = false; 
    boolean leerzeichnen = false;
    JCheckBox rechtecke;
    JCheckBox kreise;
    JRadioButton leer;
    JRadioButton voll;
    ButtonGroup modus;
    JButton tues;

    Random r = new Random();

    public FarbKlecks(String title) {
        super(title);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        rechtecke = new JCheckBox("Rechtecke", false);
        kreise = new JCheckBox("Kreise", false);
        c.add(rechtecke);
        c.add(kreise);
        modus = new ButtonGroup();
        leer = new JRadioButton("leer", false);
        voll = new JRadioButton("voll", false);
        modus.add(leer);
        modus.add(voll);
        c.add(leer);
        c.add(voll);
        tues = new JButton ("zeichnen");
        tues.addActionListener(this);
        c.add(tues);
        rechtecke.addItemListener(this); 
        kreise.addItemListener(this);
        leer.addActionListener(this);
        voll.addActionListener(this);
    }

    public void actionPerformed (ActionEvent ae) {

        if (ae.getSource() == voll) {
            vollzeichnen = true;
            leerzeichnen = false;
        }
        if (ae.getSource() == leer) {
            vollzeichnen = false;
            leerzeichnen = true;
        }
        if (ae.getSource() == tues) repaint();
    }

    public void itemStateChanged(ItemEvent ie) {
        if (ie.getSource() == rechtecke) {
            if (ie.getStateChange()==ItemEvent.SELECTED) rechteckezeichnen = true;
            else rechteckezeichnen = false;
        }
        if (ie.getSource() == kreise) {
            if (ie.getStateChange()==ItemEvent.SELECTED) kreisezeichnen = true;
            else kreisezeichnen = false;
        }
    }
    
    public void paint(Graphics bs) {
        bs.setColor(Color.white);
        bs.fillRect(10,60,380,220);
        int ende = z(50);
        for (int i=0; i<ende; i++) {
            switch(z(10)) {
            case 1:bs.setColor(Color.red); break;
            case 2:bs.setColor(Color.yellow); break;
            case 3:bs.setColor(Color.green); break;
            case 4:bs.setColor(Color.orange); break;
            case 5:bs.setColor(Color.blue); break;
            case 6:bs.setColor(Color.cyan); break;
            case 7:bs.setColor(Color.cyan); break;
            case 8:bs.setColor(Color.black); break;
            case 9:bs.setColor(Color.magenta); break;
            case 10:bs.setColor(Color.lightGray); break;
            }
            if (vollzeichnen == true) {
                if (rechteckezeichnen == true) bs.fillRect(z(180)+20, z(100)+70, z(180), z(100));
                if (kreisezeichnen == true) bs.fillOval(z(180)+20, z(100)+70, z(180), z(100));
            }
            if (leerzeichnen == true) {
                if (rechteckezeichnen == true) bs.drawRect(z(180)+20, z(100)+70, z(180), z(100));
                if (kreisezeichnen == true) bs.drawOval(z(180)+20, z(100)+70, z(180), z(100));
            }
        }
    }
 
    public int z(int range) {
        return r.nextInt(range)+1;
    }
   
    public static void main(String [] args) {
        FarbKlecks proggi = new FarbKlecks("Buntes ;-)");
        WindowListener wl = new WindowAdapter () {
                public void windowClosing(WindowEvent we) {
                    System.exit(0);
                }
            };
        proggi.addWindowListener(wl);
        proggi.setLocation(100,100);
        proggi.setSize(400,300);
        proggi.show();
    }
}

Beachte die Verwendung von ActionListener und ItemListener! Die Methode z(int range) liefert eine ganzzahlige Zufallszahl zwischen 1 und dem angegebenen Wert für range; für die Darstellung werden 10 zufällig gewählte Farben verwendet.


\includegraphics[width=7cm]{FarbKlecks.ps}



Alfred Nussbaumer 2003-02-10