今天用了一下JSpinner

js

今天用了一下JDK1.4 中新增的JSpinner,它能够方便地选择日期、数字或列表中的选项。

JSpinner 示例

用户使用组件或键盘上的上移和下移箭头进行选择。他们也可输入自己的选择。然而,与 JComboBox 不同,JSpinner 不提供下拉列表选择,所以各个选择以及它们的顺序应有一定的意义。

要使用类,可简单地创建一个供选择的元素集合(在 List 或数组中),从列表中创建一个 SpinnerModel,并为模型创建一个 JSpinner:

清单 1. 简单的 JSpinner 用法

String[] months = new DateFormatSymbols().getMonths();
SpinnerModel model = new SpinnerListModel(months);
JSpinner spinner = new JSpinner(model);

根据您所用的输入类型,有以下几个可用于创建组件数据模型的帮助类:

SpinnerDateModel:用于接受日期输入。该类支持通过将 Calendar 类中的常数设置为不同的值来更改日期;例如,Calendar.WEEK_OF_MONTH 每次将日期更改一周。

SpinnerListModel:用于接受来自值列表的输入。

SpinnerNumberModel:用于接受已设定好步长的一定范围内的数字( int 或 double)的输入。
每个 SpinnerModel 执行取决于用于输入值的编辑器。此编辑器必须是一个 JComponent;系统定义的编辑器子类 JSpinner.DefaultEditor。其中一个可用于每个模型:

JSpinner.DateEditor:用于 SpinnerDateModel。允许您定制输入日期格式。

JSpinner.ListEditor:用于 SpinnerListModel。支持 type-ahead 来对值进行定位。

JSpinner.NumberEditor:用于 SpinnerNumberModel。允许您定制十进制格式的模式。

事件处理
JSpinner 组件象其它 Swing 组件一样工作。如果您有兴趣查出用户更改选择的时间,请连一个侦听器。对于 JSpinner,侦听器是一个 ChangeListener,您可直接将其连到 JSpinner 或其 SpinnerModel 上。虽然您可将侦听器连到两者中的任意一个,当值发生更改时,ChangeEvent 的源总是 SpinnerModel:

清单 2. JSpinner 事件侦听

ChangeListener listener = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
SpinnerModel source = (SpinnerModel)e.getSource();
System.out.println("The value is: " + source.getValue());
}
};
model.addChangeListener(listener);

一个完整的示例
让我们来看一下使用全部三种不同的 spinner 模型的示例(清单 3)。列表模型使用从 DateFormatSymbols 类取出的月份名称集。日期模型示例更改编辑器的输入格式。当使用该字段旁边的箭头时,每次也可将日期移动一周。数字模型示例让用户选取从 0 到 100 之间的一个数字,当使用箭头时每次跳 5 个数。请注意:用户可输入任意数字,而并不仅限于 5 的倍数。

对于所有组件来说,当每个 spinner 值确实发生更改时,所连的侦听器将显示同一改变。如果使用光标键更改月、日或年,您会注意到直到按下回车键这些值才发生更改。

清单 3. JSpinner 完整示例

import javax.swing.*;
import javax.swing.event.*;
import java.text.*;
import java.awt.*;
import java.util.*;

public class Spinner {
public static void main (String args[]) throws Exception {
JFrame frame = new JFrame("Spinner");
frame.setDefaultCloseOperation(3);
String[] months = new DateFormatSymbols().getMonths();
SpinnerModel model = new SpinnerListModel(months);
JSpinner spinner = new JSpinner(model);
frame.getContentPane().add(spinner, BorderLayout.NORTH);

SpinnerDateModel model2 = new SpinnerDateModel();
model2.setCalendarField(Calendar.WEEK_OF_MONTH);
JSpinner spinner2 = new JSpinner(model2);
JSpinner.DateEditor editor2 = new JSpinner.DateEditor(
spinner2, "MMMMM dd, yyyy");
spinner2.setEditor(editor2);
frame.getContentPane().add(spinner2, BorderLayout.SOUTH);

SpinnerNumberModel model3 = new SpinnerNumberModel(50, 0, 100, 5);
JSpinner spinner3 = new JSpinner(model3);
frame.getContentPane().add(spinner3, BorderLayout.CENTER);

ChangeListener listener = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
SpinnerModel source = (SpinnerModel)e.getSource();
System.out.println("The value is: " + source.getValue());
}
};
model.addChangeListener(listener);
model2.addChangeListener(listener);
model3.addChangeListener(listener);

frame.pack();
frame.show();
}
}

时间: 2024-12-12 06:04:02

今天用了一下JSpinner的相关文章

怎么实现java按钮的播放与暂停,按一次就是暂停,按一次就是播放?

问题描述 怎么实现java按钮的播放与暂停,按一次就是暂停,按一次就是播放? import java.awt.EventQueue;import java.io.*;import java.util.*;import javax.swing.JFrame;import javax.swing.JSlider;import javax.swing.JButton;import javax.media.*;import java.applet.*;import jmapps.ui.JMFrame;i

格式化输入日期时间控件 JieFormattedDateBox

控件 格式化输入日期时间控件 可以用JieFormattedDateBox box = new JieFormattedDateBox("yyyy年MM月dd日HH点mm分ss秒");输入 也可以用JieFormattedDateBox box = new JieFormattedDateBox("HH:mm:ss");来输入时间 还可以这样用JSpinner spinner = new JSpinner();JieFormattedDateBox fdb = ne

java日期时间选择控件(代码)

一次项目研发中需要日期时间选择控件,网上提供的不多,且质量一般,所以只好自己做,参考了网上某位同学的作品Jave日期选择控件DateChooser . 目前的代码将日期时间选择封装在一个按钮组件内,应该很好用,支持Application .Applet CODE: import java.util.Date;import java.util.Calendar;import java.text.DateFormat;import java.text.SimpleDateFormat;import

Merlin的魔力: Swing 的新JFormattedTextField组件

Java 2 标准版(J2SE),版本 1.4 为可用的 GUI 元素调色板添加了 2 个新的 Swing 组件: JSpinner 和 JFormattedTextField .在 Merlin 的魔力专栏的第一篇我们就介绍了 JSpinner 组件:我们现在将要探讨 JFormattedTextField . 虽然 JFormattedTextField 组件看起来与 JTextField 相似,但是它的行为与 JSpinner 完全不同.在最简单的情况下,您可以为电话号码提供一个类似"(#

Java实现文件批量重命名具体实例_java

Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应的文件进行重命名.此外,还可以在重命名模板中添加特殊符号,程序会将这些特殊符号替换成重命名后的文件编号. 思路分析: 1.先看视图层,需要一些JLabel控件分别显示指示用户的信息,三个JTextField控件分别显示所选路径.输入文件名模板即输入扩展名,两个JButton控件分别用来浏览文件夹和开

Java实力弹弹球实现代码_java

先看看效果图: 直接上代码了. 微调按钮加画布画几个圆,再实现监听... package cn.hncu.threadDemo.thread2; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEven

解析Java中的定时器及使用定时器制作弹弹球游戏的示例_java

  在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. 一.简介      在java中一个完整定时任务需要由Timer.TimerTask两个类来配合完成. API中是这样定义他们的,Timer:一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.由TimerTask:Timer 安排为一次执行或重复执行的任务

Java类加载器学习1——类加载器的基本概念

  一.程序使用java类的运行顺序   当程序主动使用某个类的时候,若该类还未被加载至内存中,系统会通过加载,连接,初始化三个步骤对类进行初始化,有事也把这三个步骤称为类加载或者类的初始化.   1 类的加载 将被编译的.java而成为.class字节码读入JVM内存并为之创建一个java.lang.Class对象,也就是说当程序中使用任何类的时候系统都会为之建立一个java.lang.Class对象.类的加载由类加载器完成,类加载器通常有JVM提供,我们称JVM提供的类加载器为系统类加载器.

Java---实力弹弹球,弹弹弹

直接上代码了. 微调按钮加画布画几个圆,再实现监听... package cn.hncu.threadDemo.thread2; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; impor