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. 弹性布局详解——5个div让你学会弹性布局

      前  言 JRedu 在网页制作过程中,布局是我们最重要的一个环节.可以说布局的好坏直接影响到整个网页的成败!布局成,则事半功倍:布局败,则事倍功半. 随着移动互联的到来,响应式网站风靡.这也就兴 ...

  2. HDU 1176 免费馅饼:dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意: 横坐标范围为[0,10],你在第0秒站在坐标为5的地方. 在接下来的一段时间内,会有n个 ...

  3. 用github展示前端页面

    今天尝试了一下使用github展示前端页面,还是比较简单的,平时做一些小的demo时,可以用这个方法展示自己的页面,在此记录下方法. 首先打开自己的github项目仓库,比如   https://gi ...

  4. Qt控件窗体区域区分

    控件窗体区域区分几何参数: 指的是窗口的大小和位置,一个窗口有两套几何参数,一套是窗口外边框所占的矩形区域,另一套是窗口客户区所占的矩形区域,所谓窗口客户区就是窗口中除去边框和标题栏用来显示内容的区域 ...

  5. [UWP]了解模板化控件(5.1):TemplatePart vs. VisualState

    1. TemplatePart vs. VisualState 在前面两篇文章中分别使用了TemplatePart及VisualState的方式实现了相同的功能,其中明显VisualState的方式更 ...

  6. statement和preparedstatement的区别

    在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象.无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和 ...

  7. 盼盼Degenerate——清除浮动的方法

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...

  8. Windbg查看调用堆栈(k*)

            无论是分析程序崩溃原因,还是解决程序hang问题,我们最常查看的就是程序调用堆栈.学会windbg调用堆栈命令,以及理解堆栈中的各个参数的意义就显得至关重要. 上图就是一个典型的Win ...

  9. 【JBoss】Linux下JBoss服务器"Too many open files"的解决方法

    linux中,每个socket连接都使用文件描述符进行标识,文件描述符属于系统资源,存在使用上的限制:缺省情况下JBoss能使用的最大描述符数是系统默认的最大文件描述符数(通过命令ulimit -H ...

  10. mysql语句的一个问题

    刚才在群里有个同学提出了这么一个问题 在Mybatis的mapper文件中有一条语句这么写 说是系统不报错,也没返回,我一看句子应该没什么问题.执行的时候应该是PreparedStatement 执行 ...