Swing-JSlider用法-入門


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

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM