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.