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

Swing-JSlider用法-入门的更多相关文章

  1. 精通awk系列(4):awk用法入门

    回到: Linux系列文章 Shell系列文章 Awk系列文章 awk用法入门 awk 'awk_program' a.txt awk示例: # 输出a.txt中的每一行 awk '{print $0 ...

  2. [转帖]PG语法解剖--基本sql语句用法入门

    PG语法解剖--基本sql语句用法入门 https://www.toutiao.com/i6710897833953722894/ COPY 命令挺好的 需要学习一下. 原创 波波说运维 2019-0 ...

  3. Go之Logrus用法入门

    Go之Logrus用法入门 Logrus是Go (golang)的结构化日志程序,完全兼容标准库的API日志程序. Logrus is a structured logger for Go (gola ...

  4. AWK用法入门详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  5. Swing-JComboBox用法-入门

    JComboBox是Swing中的下拉菜单控件.它永远只能选中一个项目,然而比单选按钮节省空间.如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框.注意,对 ...

  6. Swing-setBorder()用法-入门

    注:本文内容转自:Swing编程边框(Border)的用法总结.内容根据笔者理解稍有整理. 函数说明: public void setBorder(Border border) 设置此组件的边框.Bo ...

  7. Java-Preferences用法-入门

    Properties提供的应用程序解决方案主要存在两个问题: (1)配置文件不能放在主目录中,因为某些OS(如Win9X)没有主目录的概念: (2)没有标准的文件命名规则,存在文件名冲突的可能性. J ...

  8. Java-Properties用法-入门

    对于应用程序的配置,通常的做法是将其保存在独立的配置文件中,程序启动时加载,修改时保存.Java中Properties类就提供了这样一种机制,配置项以Key-Value的数据结构存储在文本文件中,扩展 ...

  9. MongoDB 用法入门(windows)①

    概述 大家对数据库肯定不陌生,肯定也有很多人用过MySQL,但是在用MySQL的时候各种建表,写表之间的关联让人非常头疼. MongoDB也是一种数据库,但是它不是用表,而是用集合来装数据的,我对这种 ...

随机推荐

  1. IDE eclipse PyDev插件安装

    Python安装成功后,即要配置开发环境,这里选用Eclipse, 在Eclipse中安装PyDev插件,有多种方法,这里介绍最最常用的两种. 1)使用Eclipse安装插件,打开eclipse,进入 ...

  2. 【HOSTS相关】什么时候使用127.0.0.1

    什么时候使用127.0.0.1 在测试环境,如果想知道上线后服务发生异常中断的情况下界面会如何展示,这个时候有2种方式: 第1种是:由开发人员协助,比如后台开发人员在服务器上使这个服务停止,或者由前端 ...

  3. 详解.Net 如何上传自己的包到Nuget平台以及如何使用Nuget包管理器

    首先需要一个Nuget账户,可以在官网注册:https://www.nuget.org.已有账户略. 需要一个ApiKeys,登录之后,在我的账户里找到ApiKeys进去; 创建ApiKeys 下载N ...

  4. JavaScript入门之数组:Array类型详解

    数组应该是每个语言中都用得极度频繁的数据类型,JavaScript也不例外. 个人认为,Js中的Array类型非常强大. 首先没有C/C++等语言需要在数组初始化时指定数组长度(并不可变)的要求. 也 ...

  5. SQL查询操作及子句优先级

    用source .sql文件竟然可以自动建表. 简单数据查询: select * from table_name; 避免重复查询: select distinct(field_name) from t ...

  6. UML类图及依赖,泛化,关联,聚合,组合,实现

    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...

  7. Jsp敏感词过滤

    Jsp敏感词过滤 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实 ...

  8. css实现未知高度水平垂直居中

    页面设计中,经常需要实现元素的水平垂直居中,css实现的方法有很多(列如: margin: auto.position定位.css表达式calc().使用css预处理.table等都可以实现水平居中) ...

  9. 【前端】向blog或网站中添加语法高亮显示代码方法总结

    向blog或网站中添加语法高亮显示的代码方法总结 文章目录 预备知识 目标 第一类方法:嵌入 第二类方法:外部引用 第三类方法:忽略HTML和PHP 最近在写代码时遇到一个问题,就是如何让代码像在ID ...

  10. Extjs6获取Grid里的数据(数据源)

    { xtype: 'grid', sortableColumns: false, reference: 'grid', flex: 1, store: 'panoram.Panoram', colum ...