package com.swing.demo; import java.awt.BorderLayout; import java.awt.Component; import java.awt.EventQueue; import java.awt.FlowLayout; import java.util.Dictionary; import java.util.Hashtable; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * 滑板测试 * * @author Administrator * */ public class SliderTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable(){ public void run() { SliderTestFrame frame = new SliderTestFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } class SliderTestFrame extends JFrame{ JTextField textField; ChangeListener listener ; JPanel sliderPanel ; private static final int DEFAULT_WIDTH = 350; private static final int DEFAULT_HEIGHT = 450; public SliderTestFrame () { setTitle("SliderTestFrame ."); setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); sliderPanel = new JPanel(); sliderPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); listener = new ChangeListener(){ public void stateChanged(ChangeEvent e) { JSlider source =(JSlider)e.getSource(); textField.setText(""+source.getValue()); } }; //add a plain slider JSlider slider = new JSlider(); addSlider(slider,"Plain"); add(sliderPanel); //add a slider with major and minor ticks slider = new JSlider(); slider.setPaintTicks(true); //为大标尺添加标尺标签 slider.setMajorTickSpacing(20); slider.setMinimum(5); addSlider(slider,"Ticks"); //add a slider that snaps to ticks(记号) slider = new JSlider(); slider.setPaintTicks(true); slider.setSnapToTicks(true); //强制滑板对齐标尺 slider.setMajorTickSpacing(20); slider.setMinimum(5); addSlider(slider,"Snap to ticks"); //add a slider with no track(按路径) slider = new JSlider(); slider.setPaintTicks(true); //为大尺标添加尺标标签 slider.setMajorTickSpacing(20); slider.setMinorTickSpacing(5); slider.setPaintTrack(false); addSlider(slider,"No track"); //add an inverted(反转方式) slider slider = new JSlider(); slider.setPaintTicks(true); slider.setMajorTickSpacing(20); slider.setMinorTickSpacing(5); slider.setInverted(true); addSlider(slider,"Inverted"); //add a slider with numeric (按数字)labels slider = new JSlider(); slider.setPaintTicks(true);//为大尺标添加尺标标签 slider.setPaintLabels(true);//绘制label slider.setMajorTickSpacing(20); //绘制长度 slider.setMinorTickSpacing(5); //绘制高度 addSlider(slider,"Lables "); //add a slider with alphabetic (按字母次序) labels slider = new JSlider(); slider.setPaintLabels(true); slider.setPaintTicks(true); slider.setMajorTickSpacing(20); slider.setMinorTickSpacing(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,"Custom labels"); //add a slider with icon labels slider = new JSlider(); slider.setPaintLabels(true); slider.setPaintTicks(true); slider.setSnapToTicks(true); slider.setMajorTickSpacing(20); slider.setMinorTickSpacing(20); labelTable = new Hashtable<Integer,Component>(); //add card images labelTable.put(0,new JLabel(new ImageIcon("..."))); labelTable.put(20,new JLabel(new ImageIcon("..."))); labelTable.put(40,new JLabel(new ImageIcon("..."))); labelTable.put(60,new JLabel(new ImageIcon("..."))); labelTable.put(80,new JLabel(new ImageIcon("..."))); labelTable.put(100,new JLabel(new ImageIcon("..."))); slider.setLabelTable(labelTable); addSlider(slider,"Icon labels"); //add the field that displays the slider value textField = new JTextField(); add(sliderPanel,BorderLayout.CENTER); add(textField,BorderLayout.SOUTH); } /** * 为滑板添加事件监听 * @param s * @param discription */ private void addSlider(JSlider s, String discription) { s.addChangeListener(listener); //重新绘制面板 JPanel panel = new JPanel(); //将滑板添加到面板中 panel.add(s); //重新绘制面板中的的Label文本 panel.add(new JLabel(discription)); //扔到大的面板中 sliderPanel.add(panel); } }