阅读(4868) (0)

Java Swing JSlider

2017-01-09 19:23:21 更新

Java Swing教程 - Java Swing JSlider


JSlider允许我们通过沿着轨道滑动旋钮从两个整数之间的值列表中选择一个值。

JSlider有四个重要的属性:

  • an orientation
  • a minimum value
  • a maximum value
  • a current value

方向确定是水平还是垂直显示。我们可以使用SwingConstants.VERTICAL和SwingConstants.HORIZONTAL值来定向它。

以下代码创建一个水平JSlider,最小值为0,最大值为10,当前值设置为5:

JSlider points = new JSlider(0, 10,   5);

要获取JSlider的当前值,请使用其getValue()方法。要设置当前值,请使用其setValue(int value)方法。

要在JSlider上显示次要和主要刻度,设置需要显示这些tick的间隔,并调用其方法来启用刻画画,如下面的代码。

points.setMinorTickSpacing(1); 
points.setMajorTickSpacing(2); 
points.setPaintTicks(true);

在JSlider中显示标准标签或显示沿轨道值的自定义标签。

标准标签将显示沿轨道的整数值,我们可以调用其setPaintLabels(true)方法在主刻度间距显示整数值。

JSlider也支持自定义标签。 JSlider上的标签使用JLabel组件显示。 我们需要创建一个带有值标签对的Hashtable,并使用它的setLabelTable()方法设置标签。

以下代码将值0设置为标签“差",值5设置为“平均值",值10设置为“极好"。

设置标签表不会显示标签。 我们必须调用setPaintLabels(true)方法来显示它们。

Hashtable labelTable  = new Hashtable(); 
labelTable.put(new Integer(0), new JLabel("Poor")); 
labelTable.put(new Integer(5), new JLabel("Average"));
labelTable.put(new Integer(10),  new JLabel("Excellent"));

// Set  the   labels for the   JSlider and  make them  visible points.setLabelTable(labelTable); 
points.setPaintLabels(true);


更改侦听器

import java.awt.Dimension;
/*from  w  ww  .  ja  v a 2 s  .c o  m*/
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Main {
  public static void main(String[] args) {
    JFrame f = new JFrame();
    final JSlider slider = new JSlider(0, 150, 0);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    slider.setPreferredSize(new Dimension(150, 30));
    slider.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent event) {
        int value = slider.getValue();
        if (value == 0) {
          System.out.println("0");
        } else if (value > 0 && value <= 30) {
          System.out.println("value > 0 && value <= 30");
        } else if (value > 30 && value < 80) {
          System.out.println("value > 30 && value < 80");
        } else {
          System.out.println("max");
        }
      }
    });
    f.add(slider);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}


刻度线样式

以下代码显示如何设置tick的距离和样式。

import java.awt.BorderLayout;
//from   w  w  w.  j a  va  2  s . co  m
import javax.swing.BoundedRangeModel;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Main {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Tick Slider");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JSlider jSliderOne = new JSlider();

    // Major Tick 25 - Minor 5
    jSliderOne.setMinorTickSpacing(5);
    jSliderOne.setMajorTickSpacing(25);
    jSliderOne.setPaintTicks(true);
    jSliderOne.setSnapToTicks(true);

    frame.add(jSliderOne, BorderLayout.NORTH);
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}

刻度线样式...

下面的代码显示了如何标签JSlider位置:使用文本标记JSlider。

import java.awt.BorderLayout;
import java.util.Hashtable;
/*from   ww w .  j a  v a2  s .co  m*/
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;

public class Main {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Tick Slider");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JSlider jSliderOne = new JSlider();

    jSliderOne.setPaintLabels(true);
    
    Hashtable<Integer, JLabel> table = new Hashtable<Integer, JLabel>();
    table.put (0, new JLabel(new ImageIcon("yourFile.gif")));
    table.put (10, new JLabel("Ten"));
    table.put (25, new JLabel("Twenty-Five"));
    table.put (34, new JLabel("Thirty-Four"));
    table.put (52, new JLabel("Fifty-Two"));
    table.put (70, new JLabel("Seventy"));
    table.put (82, new JLabel("Eighty-Two"));
    jSliderOne.setLabelTable (table);
    
    frame.add(jSliderOne, BorderLayout.NORTH);
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}

拇指图标

下面的代码显示了如何为JSlider设置ThumbIcon。

import java.awt.BorderLayout;
/*from   w  w  w . j  a  v a 2 s  .  co  m*/
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.UIDefaults;
import javax.swing.UIManager;

public class Main {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Tick Slider");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // No Ticks
    JSlider jSliderOne = new JSlider();
    Icon icon = new ImageIcon("yourFile.gif");
    UIDefaults defaults = UIManager.getDefaults();
    defaults.put("Slider.horizontalThumbIcon", icon);

    frame.add(jSliderOne, BorderLayout.NORTH);
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}

拇指图标...

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
/* w  w w .ja v  a2 s  .com*/
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame();

    JPanel main = new JPanel(new GridLayout(2, 1));
    JPanel scrollBarPanel = new JPanel();
    final JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 0, 48, 0, 255);
    int height = scrollBar.getPreferredSize().height;
    scrollBar.setPreferredSize(new Dimension(175, height));
    scrollBarPanel.add(scrollBar);
    main.add(scrollBarPanel);

    JPanel sliderPanel = new JPanel();
    final JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 255, 128);
    slider.setMajorTickSpacing(48);
    slider.setMinorTickSpacing(16);
    slider.setPaintTicks(true);
    sliderPanel.add(slider);
    main.add(sliderPanel);

    frame.add(main, BorderLayout.CENTER);

    scrollBar.addAdjustmentListener(new AdjustmentListener() {
      public void adjustmentValueChanged(AdjustmentEvent e) {
        System.out.println("JScrollBar"s current value = " + scrollBar.getValue());
      }
    });

    slider.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
        System.out.println("JSlider"s current value = " + slider.getValue());
      }
    });

    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
}