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

  • 相关阅读:
    xuexi
    太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记
    python 死循环
    redis 锁
    Opencv4.1.0交叉编译----终端摄像头内算法嵌入,海思HISI、雄迈ARM编译链使用经验
    SpringCloud之FeignClient调用跨微服接口
    Elasticsearch父子级查询及祖孙辈parent/child关联查询
    服务器ip地址与域名解析及http转https
    RestTemplate请求第三方接口添加Headers token及设置请求体
    kanzi 一些基础参数变量
  • 原文地址:https://www.cnblogs.com/pzy4447/p/4641631.html
Copyright © 2020-2023  润新知