SliderDemo.java


SliderDemo.java

// Fig. 22.02-04: SliderDemo.java
// Testing SliderFrame.
// Using JSliders to size an oval.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

class OvalPanel extends JPanel 
{
   private int diameter = 10; // default diameter 

   // draw an oval of the specified diameter
   @Override
   public void paintComponent(Graphics g)
   {
      super.paintComponent(g);
      g.fillOval(10, 10, diameter, diameter); 
   }

   // validate and set diameter, then repaint 
   public void setDiameter(int newDiameter)
   {
      // if diameter invalid, default to 10
      diameter = (newDiameter >= 0 ? newDiameter : 10);
      repaint(); // repaint panel
   } 

   // used by layout manager to determine preferred size
   public Dimension getPreferredSize()
   {
      return new Dimension(200, 200);
   }

   // used by layout manager to determine minimum size
   public Dimension getMinimumSize()
   {
      return getPreferredSize();
   } 
} // end class OvalPanel

class SliderFrame extends JFrame 
{
   private final JSlider diameterJSlider; // slider to select diameter
   private final OvalPanel myPanel; // panel to draw circle

   // no-argument constructor
   public SliderFrame() 
   {
      super("Slider Demo");

      myPanel = new OvalPanel(); // create panel to draw circle
      myPanel.setBackground(Color.YELLOW); 

      // set up JSlider to control diameter value
      diameterJSlider = 
         new JSlider(SwingConstants.HORIZONTAL, 0, 200, 10);
      diameterJSlider.setMajorTickSpacing(10); // create tick every 10
      diameterJSlider.setPaintTicks(true); // paint ticks on slider

      // register JSlider event listener
      diameterJSlider.addChangeListener(
         new ChangeListener() // anonymous inner class
         {  
            // handle change in slider value
            @Override
            public void stateChanged(ChangeEvent e)
            {
               myPanel.setDiameter(diameterJSlider.getValue());
            } 
         } 
      ); 

      add(diameterJSlider, BorderLayout.SOUTH); 
      add(myPanel, BorderLayout.CENTER); 
   } 
} // end class SliderFrame


public class SliderDemo 
{
   public static void main(String[] args)
   { 
      SliderFrame sliderFrame = new SliderFrame(); 
      sliderFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      sliderFrame.setSize(220, 270); 
      sliderFrame.setVisible(true); 
   } 
} // end class SliderDemo


Maintained by John Loomis, updated Mon Feb 27 11:21:04 2017