import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.Dictionary;
import java.util.Hashtable;
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;
public class SliderFrame extends JFrame {
private JPanel sliderPanel;
private JTextField textField;
private ChangeListener listener;
public SliderFrame() {
textField = new JTextField();
sliderPanel = new JPanel();
sliderPanel.setLayout(new GridBagLayout());
listener = new ChangeListener(){
@Override
public void stateChanged(ChangeEvent e) {
JSlider source =(JSlider)e.getSource();
textField.setText(""+source.getValue());
}
};
JSlider slider = new JSlider();
addSlider(slider,"Plain");
//添加主刻度和次刻度
slider = new JSlider();
slider.setPaintTicks(true);
slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(5);
addSlider(slider,"Ticks");
//滑块对齐到最近的刻度
slider = new JSlider();
slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(5);
slider.setPaintTicks(true);
slider.setSnapToTicks(true);
addSlider(slider,"Snap to track");
//没有滑道
slider = new JSlider();
slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(5);
slider.setPaintTicks(true);
slider.setPaintTrack(false);
slider.setSnapToTicks(true);
addSlider(slider,"no tracks");
//为刻度添加刻度标签
slider = new JSlider();
slider.setPaintTicks(true);
slider.setPaintLabels(true);
slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(5);
addSlider(slider,"labels");
//值从大到小
slider = new JSlider();
slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(5);
slider.setPaintTicks(true);
slider.setInverted(true);
slider.setPaintLabels(true);
addSlider(slider,"Inverted");
//自定义刻度标签
slider = new JSlider();
slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(5);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
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");
this.add(sliderPanel,BorderLayout.CENTER);
this.add(textField,BorderLayout.SOUTH);
this.setLocation(300, 400);
this.setResizable(false);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.pack();
}
private void addSlider(JSlider slider, String sliderName) {
slider.addChangeListener(listener);
JPanel panel = new JPanel();
panel.add(slider);
panel.add(new JLabel(sliderName));
panel.setAlignmentX(Component.LEFT_ALIGNMENT);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridy = sliderPanel.getComponentCount(); //位于第几行
gbc.anchor = GridBagConstraints.WEST; //滚动条位于西面
sliderPanel.add(panel,gbc);
}
public static void main(String[] args) {
new SliderFrame();
}
}