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