import javax.swing.*;           // Copyright Arto Wikla, 8.12.2005
import java.awt.Graphics;
import java.awt.*;
import java.awt.event.*;

public class Maalaus extends JFrame
                       implements ActionListener  {

  private JButton nappula = new JButton("Uusi maalaus!");
  private VariPaneeli kuva = new VariPaneeli();

  public Maalaus() {
    setLayout(new BorderLayout());
    add("Center", kuva);
    add("South", nappula);
    nappula.addActionListener(this);
    kuva.setOpaque(false); // estää "ylimääräisen" buttonin varjon
    nappula.setOpaque(false);
  }

  public void actionPerformed(ActionEvent tapahtuma) {
    Object aiheuttaja = tapahtuma.getSource();
    if (aiheuttaja == nappula) {
      kuva.repaint();
    }
  }

  public static void main(String[] args) {
        Maalaus ikkuna = new Maalaus();
        ikkuna.setTitle("Art_o");
        ikkuna.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ikkuna.setSize(285, 330);
        ikkuna.setVisible(true);
    }
}

class VariPaneeli extends JPanel {

  public void paintComponent(Graphics kuva) {
     int r,g,b; // RGB värikolmikko
     double mikäKolmesta = Math.random();

     if (mikäKolmesta < 0.3333333) {
       r = (int)(Math.random()*256);
       for (b=0; b<256; b+=3) 
         for (g=0; g<256; g+=3) {
           Color vari = new Color(r, 255-b,255-g);
           kuva.setColor(vari);
           kuva.fillRect(10+b,10+g, 3,3);
         }
     }
     else if (mikäKolmesta < 0.6666666) {
       g = (int)(Math.random()*256);
       for (r=0; r<256; r+=3) 
         for (b=0; b<256; b+=3) {
           Color vari = new Color(255-r, g, 255-b);
           kuva.setColor(vari);
           kuva.fillRect(10+r,10+b, 3,3);
         }
     }
     else {
       b = (int)(Math.random()*256);
       for (r=0; r<256; r+=3) 
         for (g=0; g<256; g+=3) {
           Color vari = new Color(255-r,255-g,b);
           kuva.setColor(vari);
           kuva.fillRect(10+r,10+g, 3,3);
         }
     }

     kuva.fillOval(10+ (int)(Math.random()*210), 
                   10+ (int)(Math.random()*220),
                   15 + (int)(Math.random()*30),
                   15 + (int)(Math.random()*30) );

     kuva.fillOval(10+ (int)(Math.random()*210), 
                   10+ (int)(Math.random()*210),
                   15 + (int)(Math.random()*30),
                   15 + (int)(Math.random()*30) );
  }
}

