JSlider是Swing中的滑块控件,在交互过程中用户可拖动它来实现数值的调整。它具有3个基本参数,分别为:最小值、最大值和初始值,如果不指定数值,则默认值分别为:0,100,50。滑块的值发生改变时,会产生ChangeEvent事件,因此必须事先为其绑定ChangeListener监听器,并在响应函数中使用getValue方法跟踪其最新值。滑块可以具有多种式样,首先是标尺。使用setMajorTickSpacing方法设置大格子的间距,setMinorTickSpacing设置小格子的间距,效果类似于直尺中的厘米刻度与毫米刻度。使用setPaintTicks(bool agr)设置是否显示标尺。使用setSnapToTicks设置滑块强制对应到标尺,开启后,点击滑块时它会跳到最近的下一刻度上。使用setInverted可以设置标尺方向反转。使用setPaintLabels可强制显示标尺刻度的标签。可使用setLabelTable为标尺设置各刻度对应的JLabel,其参数为一个Hashtable<Integer, Component>(),储存了刻度值与JLabel的对应表。当然,你也可以为所有JLabel添加图标。
常用方法如下:
示例代码如下:
import java.awt.*; import java.util.Dictionary; import java.util.Hashtable; import javax.swing.*; import javax.swing.event.*; public class JSliderDemo extends JFrame { /** * source code from 《java核心技术 卷1 基础知识》 P340 */ int DEFAULT_WIDTH = 350; int DEFAULT_HEIGHT = 450; private JPanel sliderPanel; private JTextField textField; private ChangeListener changeListener;// 监听器 public JSliderDemo() { setTitle("JSliderDemo"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // 构造一个监听器,响应事件 changeListener = new ChangeListener() { public void stateChanged(ChangeEvent event) { System.out.println("stateChanged called"); // update textField when the slider value changes if (event.getSource() instanceof JSlider) { JSlider source = (JSlider) event.getSource(); textField.setText("" + source.getValue()); System.out.println(source.getValue()); } } }; // 添加sliderPanel,它包含个JSlider sliderPanel = new JPanel(); sliderPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); // add textField that displays the slider value textField = new JTextField(); add(sliderPanel, BorderLayout.CENTER); add(textField, BorderLayout.SOUTH); // add Plain slider JSlider slider = new JSlider(); addSlider(slider, "Plain"); // add Ticks slider slider = new JSlider(); slider.setPaintTicks(true);// 显示标尺 slider.setMajorTickSpacing(20); // 20一大格 slider.setMinorTickSpacing(5);// 5一小格 addSlider(slider, "Ticks"); // add SnapToTicks slider slider = new JSlider(); slider.setPaintTicks(true);// 显示标尺 slider.setSnapToTicks(true);//强制对齐到标尺 slider.setMajorTickSpacing(20);// 20一大格 slider.setMinorTickSpacing(5);// 5一小格 addSlider(slider, "SnapToTicks"); // add NoTrack slider slider = new JSlider(); slider.setPaintTicks(true);// 显示标尺 slider.setMajorTickSpacing(20);// 20一大格 slider.setMinorTickSpacing(5);// 5一小格 slider.setPaintTrack(false);//不显示数轴 addSlider(slider, "NoTrack"); // add InvertedSlider slider = new JSlider(); slider.setPaintTicks(true);// 显示标尺 slider.setMajorTickSpacing(20);// 20一大格 slider.setMinorTickSpacing(5);// 5一小格 slider.setInverted(true);//反转slider方向 addSlider(slider, "InvertedSlider"); // add Slider with labels slider = new JSlider(); slider.setPaintTicks(true);// 显示标尺 slider.setPaintLabels(true);//添加数字标签 slider.setMajorTickSpacing(20);// 20一大格 slider.setMinorTickSpacing(5);// 5一小格 addSlider(slider, "Labels"); // add Slider with alphabetic labels slider = new JSlider(); slider.setPaintTicks(true);// 显示标尺 slider.setPaintLabels(true); slider.setMajorTickSpacing(20);// 20一大格 slider.setMinorTickSpacing(5);// 5一小格 Dictionary<Integer, Component> labelTable = new Hashtable<Integer, Component>(); labelTable.put(0, new JLabel("A")); labelTable.put(20, new JLabel("B")); labelTable.put(40, new JLabel("C")); labelTable.put(60, new JLabel("D")); labelTable.put(80, new JLabel("E")); labelTable.put(100, new JLabel("F")); slider.setLabelTable(labelTable); addSlider(slider, "CustomLabels"); // add IconsSlider slider = new JSlider(); slider.setPaintTicks(true);// 显示标尺 slider.setPaintLabels(true); slider.setSnapToTicks(true); slider.setMajorTickSpacing(20);// 20一大格 slider.setMinorTickSpacing(20);// 20一小格 labelTable = new Hashtable<Integer, Component>(); labelTable.put(0, new JLabel(new ImageIcon("nine.gif"))); labelTable.put(20, new JLabel(new ImageIcon("ten.gif"))); labelTable.put(40, new JLabel(new ImageIcon("jack.gif"))); labelTable.put(60, new JLabel(new ImageIcon("queen.gif"))); labelTable.put(80, new JLabel(new ImageIcon("king.gif"))); labelTable.put(100, new JLabel(new ImageIcon("ace.gif"))); slider.setLabelTable(labelTable); addSlider(slider, "IconLabels"); } /* * 添加一个slider,并绑定监听器 */ private void addSlider(JSlider slider, String description) { slider.addChangeListener(changeListener); JPanel panel = new JPanel(); panel.add(slider); panel.add(new JLabel(description)); sliderPanel.add(panel); System.out.println("addSlider called"); } public static void main(String[] args) { // TODO Auto-generated method stub // 创建窗体并指定标题 JSliderDemo frame = new JSliderDemo(); // 关闭窗体后退出程序 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 自动适配所有控件大小 // frame.pack(); // 设置窗体位置在屏幕中央 frame.setLocationRelativeTo(null); // 显示窗体 frame.setVisible(true); } }