Java/Swing JFC/Slider

Материал из Java эксперт
Перейти к: навигация, поиск

Содержание

An example of JSlider with default labels

   <source lang="java">

/* Java Swing, 2nd Edition By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole ISBN: 0-596-00408-7 Publisher: O"Reilly

  • /

// SwingSliderExample.java // An example of JSlider with default labels. // import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSlider; public class SwingSliderExample extends JPanel {

 public SwingSliderExample() {
   super(true);
   this.setLayout(new BorderLayout());
   JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 50, 25);
   slider.setMinorTickSpacing(2);
   slider.setMajorTickSpacing(10);
   slider.setPaintTicks(true);
   slider.setPaintLabels(true);
   // We"ll just use the standard numeric labels for now...
   slider.setLabelTable(slider.createStandardLabels(10));
   add(slider, BorderLayout.CENTER);
 }
 public static void main(String s[]) {
   JFrame frame = new JFrame("Slider Example");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setContentPane(new SwingSliderExample());
   frame.pack();
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



A slider with tick marks and labels

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JSlider; public class Main extends JFrame {

 public static void main(String[] args) {
   new Main();
 }
 public Main() {
   Container content = getContentPane();
   content.setBackground(Color.white);
   JSlider slider1 = new JSlider();
   slider1.setBorder(BorderFactory.createTitledBorder("JSlider without Tick Marks"));
   content.add(slider1, BorderLayout.NORTH);
   JSlider slider2 = new JSlider();
   slider2.setBorder(BorderFactory.createTitledBorder("JSlider with Tick Marks"));
   slider2.setMajorTickSpacing(20);
   slider2.setMinorTickSpacing(5);
   slider2.setPaintTicks(true);
   content.add(slider2, BorderLayout.CENTER);
   JSlider slider3 = new JSlider();
   slider3.setBorder(BorderFactory.createTitledBorder("JSlider with Tick Marks & Labels"));
   slider3.setMajorTickSpacing(20);
   slider3.setMinorTickSpacing(5);
   slider3.setPaintTicks(true);
   slider3.setPaintLabels(true);
   content.add(slider3, BorderLayout.SOUTH);
   setSize(300,300);
   setVisible(true);
 }

}

 </source>
   
  
 
  



Change the maximum value

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   int newMax = 256;
   slider.setMaximum(newMax);
 }

}

 </source>
   
  
 
  



Change the minimum value

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   int newMin = 0;
   slider.setMinimum(newMin);
 }

}

 </source>
   
  
 
  



Constraining JSlider Component Values to Tick Marks

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a horizontal slider that moves left-to-right
   JSlider slider = new JSlider();
   // Set major tick marks every 25 units
   int tickSpacing = 25;
   slider.setMajorTickSpacing(tickSpacing);
 }

}

 </source>
   
  
 
  



Create a horizontal slider with custom min, max, and value

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   int initValue = 0;
   int minimum = 10;
   int maximum = 100;
   JSlider slider = new JSlider(minimum, maximum, initValue);
 }

}

 </source>
   
  
 
  



Create a vertical slider with custom min, max, and value

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   int initValue = 0;
   int minimum = 10;
   int maximum = 100;
   JSlider slider = new JSlider(JSlider.VERTICAL, minimum, maximum, initValue);
 }

}

 </source>
   
  
 
  



Create a vertical slider with min=0, max=100, value=50

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider(JSlider.VERTICAL);
 }

}

 </source>
   
  
 
  



Creating a JSlider Component

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a horizontal slider with min=0, max=100, value=50
   JSlider slider = new JSlider();
   // Create a horizontal slider with custom min and max; value is set to the middle
   int minimum = -255;
   int maximum = 256;
   slider = new JSlider(minimum, maximum);
 }

}

 </source>
   
  
 
  



Date slider

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ruponentEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.text.DateFormatSymbols; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Hashtable; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.border.EtchedBorder; import javax.swing.border.TitledBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class DateSlider extends JFrame {

 public final static Dimension RIGID_DIMENSION = new Dimension(1, 3);
 protected GregorianCalendar calendar = new GregorianCalendar();
 protected JLabel dateLabel;
 protected JSlider yearSlider = new JSlider(JSlider.HORIZONTAL, 1990, 2010, calendar
     .get(Calendar.YEAR));
 protected JSlider monthSlider = new JSlider(JSlider.HORIZONTAL, 1, 12, calendar
     .get(Calendar.MONTH) + 1);
 protected JSlider daySlider;
 protected Hashtable hashTable;
 protected SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, MMM d, yyyyy");
 public DateSlider() {
   super("Date Slider");
   setSize(500, 340);
   Date currentDate = new Date();
   calendar.setTime(currentDate);
   JPanel p1 = new JPanel();
   p1.setLayout(new GridLayout(4, 1));
   JPanel p = new JPanel();
   p.setBorder(new TitledBorder(new EtchedBorder(), "Selected Date"));
   dateLabel = new JLabel(dateFormat.format(currentDate) + "     ");
   dateLabel.setFont(new Font("Arial", Font.BOLD, 24));
   p.add(dateLabel);
   p1.add(p);
   yearSlider.setPaintLabels(true);
   yearSlider.setMajorTickSpacing(5);
   yearSlider.setMinorTickSpacing(1);
   yearSlider.setPaintTicks(true);
   DateListener lst = new DateListener();
   yearSlider.addChangeListener(lst);
   p = new JPanel();
   p.setBorder(new TitledBorder(new EtchedBorder(), "Year"));
   p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
   p.add(Box.createRigidArea(RIGID_DIMENSION));
   p.add(yearSlider);
   p.add(Box.createRigidArea(RIGID_DIMENSION));
   p1.add(p);
   String[] months = (new DateFormatSymbols()).getShortMonths();
   hashTable = new Hashtable(12);
   for (int i = 0; i < 12; i++)
     hashTable.put(new Integer(i + 1), new JLabel(months[i],
         JLabel.CENTER));
   monthSlider.setLabelTable(hashTable);
   monthSlider.setPaintLabels(true);
   monthSlider.setMajorTickSpacing(1);
   monthSlider.setPaintTicks(true);
   monthSlider.addChangeListener(lst);
   p = new JPanel();
   p.setBorder(new TitledBorder(new EtchedBorder(), "Month"));
   p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
   p.add(Box.createRigidArea(RIGID_DIMENSION));
   p.add(monthSlider);
   p.add(Box.createRigidArea(RIGID_DIMENSION));
   p1.add(p);
   int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
   daySlider = new JSlider(JSlider.HORIZONTAL, 1, maxDays, calendar
       .get(Calendar.DAY_OF_MONTH));
   daySlider.setPaintLabels(true);
   daySlider.setMajorTickSpacing(5);
   daySlider.setMinorTickSpacing(1);
   daySlider.setPaintTicks(true);
   daySlider.addChangeListener(lst);
   p = new JPanel();
   p.setBorder(new TitledBorder(new EtchedBorder(), "Day"));
   p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
   p.add(Box.createRigidArea(RIGID_DIMENSION));
   p.add(daySlider);
   p.add(Box.createRigidArea(RIGID_DIMENSION));
   p1.add(p);
   getContentPane().add(p1, BorderLayout.CENTER);
   WindowListener wndCloser = new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   };
   addWindowListener(wndCloser);
   enableEvents(ComponentEvent.ruPONENT_RESIZED);
   setVisible(true);
 }
 protected void processComponentEvent(ComponentEvent e) {
   if (e.getID() == ComponentEvent.ruPONENT_RESIZED) {
     int w = getSize().width;
     yearSlider.setLabelTable(null);
     if (w > 200)
       yearSlider.setMajorTickSpacing(5);
     else
       yearSlider.setMajorTickSpacing(10);
     yearSlider.setPaintLabels(w > 100);
     monthSlider.setLabelTable(w > 300 ? hashTable : null);
     if (w <= 300 && w >= 200)
       monthSlider.setMajorTickSpacing(1);
     else
       monthSlider.setMajorTickSpacing(2);
     monthSlider.setPaintLabels(w > 100);
     daySlider.setLabelTable(null);
     if (w > 200)
       daySlider.setMajorTickSpacing(5);
     else
       daySlider.setMajorTickSpacing(10);
     daySlider.setPaintLabels(w > 100);
   }
 }
 public void showDate() {
   calendar.set(yearSlider.getValue(), monthSlider.getValue() - 1, 1);
   int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
   if (daySlider.getMaximum() != maxDays) {
     daySlider.setValue(Math.min(daySlider.getValue(), maxDays));
     daySlider.setMaximum(maxDays);
     daySlider.repaint();
   }
   calendar.set(yearSlider.getValue(), monthSlider.getValue() - 1, daySlider
       .getValue());
   Date date = calendar.getTime();
   dateLabel.setText(dateFormat.format(date));
 }
 class DateListener implements ChangeListener {
   public void stateChanged(ChangeEvent e) {
     showDate();
   }
 }
 public static void main(String argv[]) {
   new DateSlider();
 }

}


 </source>
   
  
 
  



Determine if currently painting labels

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   boolean b = slider.getPaintLabels(); 
   // Paint labels at the major ticks - 0, 25, 50, 75, and 100
   slider.setPaintLabels(true);
 }

}

 </source>
   
  
 
  



Determine if currently snapping to tick marks

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a horizontal slider that moves left-to-right
   JSlider slider = new JSlider();
   boolean b = slider.getSnapToTicks(); // false
 }

}

 </source>
   
  
 
  



Drawing with Swing, using a JSlider

   <source lang="java">

// : c14:SineWave.java // Drawing with Swing, using a JSlider. // <applet code=SineWave width=700 height=400></applet> // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import javax.swing.JApplet; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; class SineDraw extends JPanel {

 private static final int SCALEFACTOR = 200;
 private int cycles;
 private int points;
 private double[] sines;
 private int[] pts;
 public SineDraw() {
   setCycles(5);
 }
 public void setCycles(int newCycles) {
   cycles = newCycles;
   points = SCALEFACTOR * cycles * 2;
   sines = new double[points];
   for (int i = 0; i < points; i++) {
     double radians = (Math.PI / SCALEFACTOR) * i;
     sines[i] = Math.sin(radians);
   }
   repaint();
 }
 public void paintComponent(Graphics g) {
   super.paintComponent(g);
   int maxWidth = getWidth();
   double hstep = (double) maxWidth / (double) points;
   int maxHeight = getHeight();
   pts = new int[points];
   for (int i = 0; i < points; i++)
     pts[i] = (int) (sines[i] * maxHeight / 2 * .95 + maxHeight / 2);
   g.setColor(Color.RED);
   for (int i = 1; i < points; i++) {
     int x1 = (int) ((i - 1) * hstep);
     int x2 = (int) (i * hstep);
     int y1 = pts[i - 1];
     int y2 = pts[i];
     g.drawLine(x1, y1, x2, y2);
   }
 }

} public class SineWave extends JApplet {

 private SineDraw sines = new SineDraw();
 private JSlider adjustCycles = new JSlider(1, 30, 5);
 public void init() {
   Container cp = getContentPane();
   cp.add(sines);
   adjustCycles.addChangeListener(new ChangeListener() {
     public void stateChanged(ChangeEvent e) {
       sines.setCycles(((JSlider) e.getSource()).getValue());
     }
   });
   cp.add(BorderLayout.SOUTH, adjustCycles);
 }
 public static void main(String[] args) {
   run(new SineWave(), 700, 400);
 }
 public static void run(JApplet applet, int width, int height) {
   JFrame frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.getContentPane().add(applet);
   frame.setSize(width, height);
   applet.init();
   applet.start();
   frame.setVisible(true);
 }

} ///:~


 </source>
   
  
 
  



Get the extent

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   int extent = slider.getExtent();
 }

}

 </source>
   
  
 
  



Getting and Setting the Values of a JSlider Component

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   // Get the current value
   int value = slider.getValue();
   // Get the minimum value
   int min = slider.getMinimum();
   // Get the maximum value
   int max = slider.getMaximum();
 }

}

 </source>
   
  
 
  



Hide the track

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   slider.setPaintTrack(false);
 }

}

 </source>
   
  
 
  



Inverted Sliders

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JSlider; public class InvertedSliders {

 public static void main(String args[]) {
   JFrame f = new JFrame("Inverted Sliders");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JSlider js1 = new JSlider();
   js1.setMajorTickSpacing(10);
   js1.setPaintTicks(true);
   js1.setPaintLabels(true);
   JSlider js2 = new JSlider();
   js2.setInverted(true);
   js2.setMajorTickSpacing(10);
   js2.setPaintTicks(true);
   js2.setPaintLabels(true);
   JSlider js3 = new JSlider(JSlider.VERTICAL);
   js3.setPaintTrack(false);
   js3.setMajorTickSpacing(10);
   js3.setPaintTicks(true);
   js3.setPaintLabels(true);
   JSlider js4 = new JSlider(JSlider.VERTICAL);
   js4.setInverted(true);
   js4.setMajorTickSpacing(10);
   js4.setPaintTicks(true);
   js4.setPaintLabels(true);
   Container c = f.getContentPane();
   c.add(js1, BorderLayout.NORTH);
   c.add(js2, BorderLayout.SOUTH);
   c.add(js3, BorderLayout.EAST);
   c.add(js4, BorderLayout.WEST);
   f.setSize(300, 250);
   f.setVisible(true);
 }

}


 </source>
   
  
 
  



JSlider Sample 2

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JSlider; public class JSliderSample {

 public static void main(String args[]) {
   JFrame f = new JFrame("JSlider Sample");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   Container content = f.getContentPane();
   JSlider slider = new JSlider();
   slider.setMinorTickSpacing(5);
   slider.setMajorTickSpacing(10);
   slider.setPaintTicks(true);
   slider.setSnapToTicks(true);
   slider.setPaintTrack(false);
   slider.setPaintLabels(true);
   slider.setToolTipText("The value is 50");
   content.add(slider, BorderLayout.CENTER);
   f.setSize(300, 100);
   f.setVisible(true);
 }

}


 </source>
   
  
 
  



Listening for Value Changes in a JSlider Component

   <source lang="java">

import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   slider.addChangeListener(new ChangeListener() {
     public void stateChanged(ChangeEvent evt) {
       JSlider slider = (JSlider) evt.getSource();
       if (!slider.getValueIsAdjusting()) {
         int value = slider.getValue();
         System.out.println(value);
       }
     }
   });
 }

}

 </source>
   
  
 
  



Make it vertical and move bottom-to-top

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   slider.setOrientation(JSlider.VERTICAL);
   slider.setInverted(false);
 }

}

 </source>
   
  
 
  



Make it vertical and move top-to-bottom

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   slider.setOrientation(JSlider.VERTICAL);
   slider.setInverted(true);
 }

}

 </source>
   
  
 
  



Make the horizontal slider move right-to-left

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   slider.setInverted(true);
 }

}

 </source>
   
  
 
  



Move the slider by a fixed amount: the extent.

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   // Set an extent
   int extent = 10;
   slider.setExtent(extent);
 }

}

 </source>
   
  
 
  



Sample Sliders

   <source lang="java">

/* Definitive Guide to Swing for Java 2, Second Edition By John Zukowski ISBN: 1-893115-78-X Publisher: APress

  • /

import java.awt.BorderLayout; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Graphics; import java.awt.Polygon; import java.util.Hashtable; import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JSlider; public class SampleSliders {

 public static void main(String args[]) {
   String title = (args.length == 0 ? "Sample Slider" : args[0]);
   JFrame f = new JFrame(title);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JSlider js1 = new JSlider();
   js1.putClientProperty("JSlider.isFilled", Boolean.TRUE);
   JSlider js2 = new JSlider();
   js2.setMajorTickSpacing(25);
   js2.setPaintTicks(true);
   js2.setSnapToTicks(true);
   JSlider js3 = new JSlider(JSlider.VERTICAL);
   js3.setPaintTrack(false);
   js3.setMinorTickSpacing(5);
   js3.setMajorTickSpacing(10);
   js3.setPaintTicks(true);
   js3.setPaintLabels(true);
   js3.setSnapToTicks(true);
   JSlider js4 = new JSlider(JSlider.VERTICAL);
   Hashtable table = new Hashtable();
   table.put(new Integer(0), new JLabel(new DiamondIcon(Color.red)));
   table.put(new Integer(10), new JLabel("Ten"));
   table.put(new Integer(25), new JLabel("Twenty-Five"));
   table.put(new Integer(34), new JLabel("Thirty-Four"));
   table.put(new Integer(52), new JLabel("Fifty-Two"));
   table.put(new Integer(70), new JLabel("Seventy"));
   table.put(new Integer(82), new JLabel("Eighty-Two"));
   table.put(new Integer(100), new JLabel(new DiamondIcon(Color.black)));
   js4.setLabelTable(table);
   js4.setPaintLabels(true);
   js4.setSnapToTicks(true);
   Container c = f.getContentPane();
   c.add(js1, BorderLayout.NORTH);
   c.add(js2, BorderLayout.SOUTH);
   c.add(js3, BorderLayout.WEST);
   c.add(js4, BorderLayout.EAST);
   f.setSize(300, 200);
   f.setVisible(true);
 }

} class DiamondIcon implements Icon {

 private Color color;
 private boolean selected;
 private int width;
 private int height;
 private Polygon poly;
 private static final int DEFAULT_WIDTH = 10;
 private static final int DEFAULT_HEIGHT = 10;
 public DiamondIcon(Color color) {
   this(color, true, DEFAULT_WIDTH, DEFAULT_HEIGHT);
 }
 public DiamondIcon(Color color, boolean selected) {
   this(color, selected, DEFAULT_WIDTH, DEFAULT_HEIGHT);
 }
 public DiamondIcon(Color color, boolean selected, int width, int height) {
   this.color = color;
   this.selected = selected;
   this.width = width;
   this.height = height;
   initPolygon();
 }
 private void initPolygon() {
   poly = new Polygon();
   int halfWidth = width / 2;
   int halfHeight = height / 2;
   poly.addPoint(0, halfHeight);
   poly.addPoint(halfWidth, 0);
   poly.addPoint(width, halfHeight);
   poly.addPoint(halfWidth, height);
 }
 public int getIconHeight() {
   return height;
 }
 public int getIconWidth() {
   return width;
 }
 public void paintIcon(Component c, Graphics g, int x, int y) {
   g.setColor(color);
   g.translate(x, y);
   if (selected) {
     g.fillPolygon(poly);
   } else {
     g.drawPolygon(poly);
   }
   g.translate(-x, -y);
 }

}


 </source>
   
  
 
  



Scroll Slider

   <source lang="java">

/* Definitive Guide to Swing for Java 2, Second Edition By John Zukowski ISBN: 1-893115-78-X Publisher: APress

  • /

import javax.swing.*; import javax.swing.event.*; import java.awt.*; public class ScrollSlider {

 public static void main(String args[]) {
   JFrame f = new JFrame("Change Slider");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
   JSlider aJSlider = new JSlider (JSlider.HORIZONTAL, 0, 1000, 500);
   ChangeListener aChangeListener = new BoundedChangeListener();
   aJSlider.addChangeListener(aChangeListener);
   Container c = f.getContentPane();
   c.add (aJSlider, BorderLayout.SOUTH);
   f.setSize (300, 200);
   f.setVisible (true);
 }

} class BoundedChangeListener implements ChangeListener {

 public void stateChanged(ChangeEvent changeEvent) {
   Object source = changeEvent.getSource();
   if (source instanceof BoundedRangeModel) {
     BoundedRangeModel aModel = (BoundedRangeModel) source;
     if (!aModel.getValueIsAdjusting()) {
       System.out.println("Changed: " + aModel.getValue());
     }
   } else if (source instanceof JSlider) {
     JSlider theJSlider = (JSlider) source;
     if (!theJSlider.getValueIsAdjusting()) {
       System.out.println("Slider changed: " + theJSlider.getValue());
     }
   } else if (source instanceof JProgressBar) {
     JProgressBar theJProgressBar = (JProgressBar) source;
     System.out.println("ProgressBar changed: "
         + theJProgressBar.getValue());
   } else {
     System.out.println("Something changed: " + source);
   }
 }

}


 </source>
   
  
 
  



Set all the values at once by using the model

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   int newValue = 2;
   int newExtent = 10;
   int newMin = 0;
   int newMax = 10;
   slider.getModel().setRangeProperties(newValue, newExtent, newMin, newMax,
       false);
 }

}

 </source>
   
  
 
  



Set major tick marks every 25 units

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a horizontal slider that moves left-to-right
   JSlider slider = new JSlider();
   int tickSpacing = 25;
   slider.setMajorTickSpacing(tickSpacing);
 }

}

 </source>
   
  
 
  



Set minor tick marks every 5 units

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a horizontal slider that moves left-to-right
   JSlider slider = new JSlider();
   int tickSpacing = 5;
   slider.setMinorTickSpacing(tickSpacing);
 }

}

 </source>
   
  
 
  



Set the extent

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   int newExtent = 10;
   slider.setExtent(newExtent);
 }

}

 </source>
   
  
 
  



Set the value; the new value will be forced into the bar"s range

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   int newValue = 33;
   slider.setValue(newValue);
 }

}

 </source>
   
  
 
  



Set to a spot between tick marks; the value moves to closest tick mark

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   slider.setValue(27);
   int value = slider.getValue();
 }

}

 </source>
   
  
 
  



Showing Tick-Mark Labels on a JSlider Component

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   // Set major tick marks every 25 units
   int tickSpacing = 25;
   slider.setMajorTickSpacing(tickSpacing);
 }

}

 </source>
   
  
 
  



Showing Tick Marks on a JSlider Component

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a horizontal slider that moves left-to-right
   JSlider slider = new JSlider();
   // Determine if currently showing ticks
   boolean b = slider.getPaintTicks(); // false
 }

}

 </source>
   
  
 
  



Show tick marks

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a horizontal slider that moves left-to-right
   JSlider slider = new JSlider();
   slider.setPaintTicks(true);
 }

}

 </source>
   
  
 
  



Slider change action listener

   <source lang="java">

import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class SliderDemo extends JFrame {

 protected JLabel label;
 protected JSlider slider;
 public SliderDemo() {
   init();
 }
 public void init() {
   getContentPane().setLayout(new FlowLayout());
   JPanel p0 = new JPanel();
   p0.setLayout(new BoxLayout(p0, BoxLayout.X_AXIS));
   JPanel p1 = new JPanel();
   p1.setLayout(new GridLayout(3, 1));
   JPanel p = new JPanel();
   p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
   label = new JLabel("101.5 FM");
   label.setFont(new Font("Arial", Font.BOLD, 24));
   p.add(label);
   p1.add(p);
   slider = new JSlider(JSlider.HORIZONTAL, 1, 5, 1);
   slider.setPaintLabels(true);
   slider.setMajorTickSpacing(5);
   MyChangeListener lst = new MyChangeListener();
   slider.addChangeListener(lst);
   p = new JPanel();
   p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
   p.add(slider);
   p1.add(p);
   p = new JPanel();
   p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
   JPanel p2 = new JPanel();
   p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
   for (int k = 1; k <= 5; k++) {
     JButton fv = new JButton(Integer.toString(k));
     fv.addActionListener(new MyActionListener(k));
     p2.add(fv);
   }
   p.add(p2);
   p1.add(p);
   p0.add(p1);
   p = new JPanel();
   p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
   p0.add(p);
   getContentPane().add(p0);
   lst.stateChanged(new ChangeEvent(slider));
 }
 public synchronized void playStation(int index) {
   slider.setValue(index);
 }
 class MyActionListener implements ActionListener {
   protected int m_index;
   MyActionListener(int index) {
     m_index = index;
   }
   public void actionPerformed(ActionEvent e) {
     playStation(m_index);
   }
 }
 class MyChangeListener implements ChangeListener {
   MyChangeListener() {
   }
   public synchronized void stateChanged(ChangeEvent e) {
     int frequency = slider.getValue();
     label.setText(frequency + " FM");
   }
 }
 public static void main(String[] za) {
   SliderDemo d = new SliderDemo();
   d.setSize(400, 200);
   d.show();
 }

}


 </source>
   
  
 
  



Slider ChangeListener

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Container; import javax.swing.BoundedRangeModel; import javax.swing.JFrame; import javax.swing.JProgressBar; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class ChangeSlider {

 public static void main(String args[]) {
   JFrame f = new JFrame("Change Slider");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JSlider aJSlider = new JSlider(JSlider.HORIZONTAL);
   ChangeListener aChangeListener = new BoundedChangeListener();
   BoundedRangeModel model = aJSlider.getModel();
   model.addChangeListener(aChangeListener);
   aJSlider.addChangeListener(aChangeListener);
   Container c = f.getContentPane();
   c.add(aJSlider, BorderLayout.SOUTH);
   f.setSize(300, 200);
   f.setVisible(true);
 }

} class BoundedChangeListener implements ChangeListener {

 public void stateChanged(ChangeEvent changeEvent) {
   Object source = changeEvent.getSource();
   if (source instanceof BoundedRangeModel) {
     BoundedRangeModel aModel = (BoundedRangeModel) source;
     if (!aModel.getValueIsAdjusting()) {
       System.out.println("Changed: " + aModel.getValue());
     }
   } else if (source instanceof JSlider) {
     JSlider theJSlider = (JSlider) source;
     if (!theJSlider.getValueIsAdjusting()) {
       System.out.println("Slider changed: " + theJSlider.getValue());
     }
   } else if (source instanceof JProgressBar) {
     JProgressBar theJProgressBar = (JProgressBar) source;
     System.out.println("ProgressBar changed: "
         + theJProgressBar.getValue());
   } else {
     System.out.println("Something changed: " + source);
   }
 }

}


 </source>
   
  
 
  



Slider Sample

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JSlider; public class SliderSample {

 public static void main(String args[]) {
   JFrame f = new JFrame("JSlider Sample");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   Container content = f.getContentPane();
   JSlider slider = new JSlider();
   slider.setMinorTickSpacing(5);
   slider.setMajorTickSpacing(10);
   slider.setPaintTicks(true);
   slider.setSnapToTicks(true);
   slider.setPaintTrack(false);
   slider.setPaintLabels(true);
   content.add(slider, BorderLayout.CENTER);
   f.setSize(300, 100);
   f.setVisible(true);
 }

}


 </source>
   
  
 
  



Snap to tick marks

   <source lang="java">

import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a horizontal slider that moves left-to-right
   JSlider slider = new JSlider();
   slider.setSnapToTicks(true);
 }

}

 </source>
   
  
 
  



Text Slider

   <source lang="java">

/* Definitive Guide to Swing for Java 2, Second Edition By John Zukowski ISBN: 1-893115-78-X Publisher: APress

  • /

import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoundedRangeModel; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.JTextField; public class TextSlider extends JPanel {

 private JTextField textField;
 private JScrollBar scrollBar;
 public TextSlider() {
   setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
   textField = new JTextField();
   scrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
   BoundedRangeModel brm = textField.getHorizontalVisibility();
   scrollBar.setModel(brm);
   add(textField);
   add(scrollBar);
 }
 public JTextField getTextField() {
   return textField;
 }
 public String getText() {
   return textField.getText();
 }
 public void addActionListener(ActionListener l) {
   textField.addActionListener(l);
 }
 public void removeActionListener(ActionListener l) {
   textField.removeActionListener(l);
 }
 public JScrollBar getScrollBar() {
   return scrollBar;
 }
 public static void main(String args[]) {
   JFrame f = new JFrame("Text Slider");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   final TextSlider ts = new TextSlider();
   ts.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
       System.out.println("Text: " + ts.getText());
     }
   });
   Container c = f.getContentPane();
   c.add(ts, BorderLayout.NORTH);
   f.setSize(300, 200);
   f.setVisible(true);
 }

}


 </source>
   
  
 
  



The slider allows you to use an arbitrary label at any particular major tick mark.

   <source lang="java">

import java.util.Dictionary; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JSlider; public class Main {

 public static void main(String[] argv) throws Exception {
   JSlider slider = new JSlider();
   
   Dictionary table = slider.getLabelTable();
   ImageIcon icon = new ImageIcon("icon.gif");
   JLabel label = new JLabel(icon);
   // Set at desired positions
   table.put(new Integer(slider.getMinimum()), label);
   table.put(new Integer(slider.getMaximum()), label);
   // Force the slider to use the new labels
   slider.setLabelTable(table);
 }

}

 </source>
   
  
 
  



Tick Sliders

   <source lang="java">

/* Definitive Guide to Swing for Java 2, Second Edition By John Zukowski ISBN: 1-893115-78-X Publisher: APress

  • /

import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JSlider; public class TickSliders {

 public static void main(String args[]) {
   JFrame f = new JFrame("Tick Slider");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   // No Ticks
   JSlider jSliderOne = new JSlider();
   // Major Tick 25 - Minor 5
   JSlider jSliderTwo = new JSlider();
   jSliderTwo.setMinorTickSpacing(5);
   jSliderTwo.setMajorTickSpacing(25);
   jSliderTwo.setPaintTicks(true);
   jSliderTwo.setSnapToTicks(true);
   // Major Tick 25 - Minor 6
   JSlider jSliderThree = new JSlider(JSlider.VERTICAL);
   jSliderThree.setMinorTickSpacing(6);
   jSliderThree.setMajorTickSpacing(25);
   jSliderThree.setPaintTicks(true);
   JSlider jSliderFour = new JSlider(JSlider.VERTICAL);
   // Major Tick 25 - Minor 1
   jSliderFour.setMinorTickSpacing(1);
   jSliderFour.setMajorTickSpacing(25);
   jSliderFour.setPaintTicks(true);
   Container c = f.getContentPane();
   c.add(jSliderOne, BorderLayout.NORTH);
   c.add(jSliderTwo, BorderLayout.SOUTH);
   c.add(jSliderThree, BorderLayout.WEST);
   c.add(jSliderFour, BorderLayout.EAST);
   f.setSize(300, 200);
   f.setVisible(true);
 }

}


 </source>
   
  
 
  



Using progress bars and sliders

   <source lang="java">

// : c14:Progress.java // Using progress bars and sliders. // <applet code=Progress width=300 height=200></applet> // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.awt.Container; import java.awt.GridLayout; import javax.swing.JApplet; import javax.swing.JFrame; import javax.swing.JProgressBar; import javax.swing.JSlider; import javax.swing.border.TitledBorder; public class Progress extends JApplet {

 private JProgressBar pb = new JProgressBar();
 private JSlider sb = new JSlider(JSlider.HORIZONTAL, 0, 100, 60);
 public void init() {
   Container cp = getContentPane();
   cp.setLayout(new GridLayout(2, 1));
   cp.add(pb);
   sb.setValue(0);
   sb.setPaintTicks(true);
   sb.setMajorTickSpacing(20);
   sb.setMinorTickSpacing(5);
   sb.setBorder(new TitledBorder("Slide Me"));
   pb.setModel(sb.getModel()); // Share model
   cp.add(sb);
 }
 public static void main(String[] args) {
   run(new Progress(), 300, 200);
 }
 public static void run(JApplet applet, int width, int height) {
   JFrame frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.getContentPane().add(applet);
   frame.setSize(width, height);
   applet.init();
   applet.start();
   frame.setVisible(true);
 }

} ///:~


 </source>