JSlider是Swing中的滑块控件,在交互过程中用户可拖动它来实现数值的调整。它具有3个基本参数,分别为:最小值、最大值和初始值,如果不指定数值,则默认值分别为:0,100,50。滑块的值发生改变时,会产生ChangeEvent事件,因此必须事先为其绑定ChangeListener监听器,并在响应函数中使用getValue方法跟踪其最新值。滑块可以具有多种式样,首先是标尺。使用setMajorTickSpacing方法设置大格子的间距,setMinorTickSpacing设置小格子的间距,效果类似于直尺中的厘米刻度与毫米刻度。使用setPaintTicks(bool agr)设置是否显示标尺。使用setSnapToTicks设置滑块强制对应到标尺,开启后,点击滑块时它会跳到最近的下一刻度上。使用setInverted可以设置标尺方向反转。使用setPaintLabels可强制显示标尺刻度的标签。可使用setLabelTable为标尺设置各刻度对应的JLabel,其参数为一个Hashtable<Integer, Component>(),储存了刻度值与JLabel的对应表。当然,你也可以为所有JLabel添加图标。

常用方法如下:

Swing-JSlider用法-入门-LMLPHP

Swing-JSlider用法-入门-LMLPHP

示例代码如下:

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);
} }

Swing-JSlider用法-入门-LMLPHP

04-14 17:54