# 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