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.