Java: Example - BullseyeDemo

// BullseyeDemo.java - Uses JSlider, graphics JPanel, BoxLayout.
// @version 1998-07-27 ... 2002-02-07
// @author Fred Swartz

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

/////////////////////////////////////////////////////// class BullseyeDemo
public class BullseyeDemo {
    //=============================================================== main
    public static void main(String[] args) {
        JFrame target = new BullseyeWindow();
        target.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        target.setVisible(true);
    }//end main
}//endclass BullseyeDemo


//////////////////////////////////////////////////////// class BullseyeWindow
class BullseyeWindow extends JFrame {
    int initialRings = 10; // Number of rings to start with.
    Bullseye be;           // The panel that draws the bullseye

    //=========================================================== constructor
    public BullseyeWindow() {
        JSlider slide = new JSlider(JSlider.HORIZONTAL, 0, 30, initialRings);
        slide.setMajorTickSpacing(5); // sets numbers for biggest tick marks
        slide.setPaintLabels(true);   // display numbers on major ticks
        slide.setMinorTickSpacing(1); // smaller tick marks
        slide.setPaintTicks(true);    // display the ticks
        slide.addChangeListener(new ChangeListener() {
                public void stateChanged(ChangeEvent e) {
                    int num = ((JSlider)(e.getSource())).getValue();
                    be.setRings(num);
                }
            });

        be = new Bullseye();
        be.setRings(initialRings);

        Container content = this.getContentPane();
        content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
        content.add(slide);
        content.add(be);
        
        this.setTitle("BullseyeDemo");
        this.pack();
        this.setResizable(false);
    }//end constructor
}//endclass BullseyeWindow


//////////////////////////////////////////////////////////// class Bullseye
class Bullseye extends JPanel {
    static final int SIZE = 300; // initial window size
    int rings = 5;  // Number of rings to draw in bullseye

    //========================================================= constructor
    public Bullseye() {
        this.setBackground(Color.white);
        this.setPreferredSize(new Dimension(SIZE, SIZE));
    }//end constructor

    //=========================================================== setRings
    public void setRings(int r) {
        rings = r;
        this.repaint();  // new value of rings - better repaint
    }//end setRings

    //===================================================== paintComponent
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int x = SIZE/2;  // x,y of top left corner for drawing circles
        int y = SIZE/2;
        
        for (int i=rings; i>0; i--) {
            if (i%2 == 0) {
                g.setColor(Color.red);
            } else {
                g.setColor(Color.blue);
            }
            int radius = i * 100/rings;  // compute radius of this ring
            g.fillOval(x-radius, y-radius, radius*2, radius*2);
        }
    }//end paintComponent
}//endclass Bullseye