使用微调控制器和微调控制器的标准数据模型,3种模型的功能和方法如下:
SpinnerDateModel模型是JSpinner选择日期的情况下使用的。使用该模型可以为其提供最大日期,最小日期,当前日期以及布进值,此类的两个构造方法如下:
SpinnerDateModel():创键一个没有起点和终点的日期模型,使用当前日期作为初始当前值
SpinnerDateModel(Date value,Comparable start ,Comparable end,int calendarFiled):创建一个具有当前值,起点,终点和步进值的日期模型
步进量的单位一般使用Calendar类的静态常量表示,如下表所示
Calendar 类的静态常量
常量 | 常量意义 |
Calendar.YEAR | 步进单位为年 |
Calendar.MONTH | 步进单位为月 |
Calendar.DAY_OF_MONTH Calendar.DATE | 步进单位为天 |
HOUR_OF_DAY(24小时制) Calendar.HOUR(12小时制) | 步进单位为小时 |
Calendar.MINUTE | 步进单位为分钟 |
Calendar.SECOND | 步进单位为秒 |
Calendar.DAY_OF_WEEK用数字(1~7)表示(星期日~星期六) | 星期几 |
Calendar.AM_PM (0-上午;1-下午) | 上/下午 |
Calendar.WEEK_OF_YEAR | 步进单位为周 |
Calendar.WEEK_OF_MONTH | 当前月的星期数 |
Calendar.DAY_OF_WEEK_IN_MONTH | 当前月中的第几个星期 |
Calendar.DAY_OF_YEAR | 当前年的第几天 |
SpinnerDateModel类中常用的方法:
public Date getDate():获取此序列中的当前元素
public Comparable getEnd() :获取序列中的最后一个日期
public Comparable getStart() :获取序列中的第一个日期
public void setEnd(Comparable end):更改此序列中的最后一个日期
public void setStart(Comparable Start):更改此序列中的第一个日期
public Object getValue():获取此日期序列中的当前元素
public Object setValue(Object value):设置此序列中的当前日期
SpinnerListModel模型使用数组或List列表的元素作为带选择的选项,该模型允许用户对数值进行微调,可以支持整数,浮点数或数字表示的特定数字序列,同样可以指定最大值,最小值,步长等
SpinnerNumberModel模型允许用户对数值进行微调,可以支持整数,浮点数或数字表示的特定数字序列,同样可以指定最大值,最小值,步长等
代码实例:
package ch10;
import java.awt.BorderLayout;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
public class SpinnerTest extends JFrame implements ChangeListener
{
JPanel jp = new JPanel();
SpinnerNumberModel snm1 = new SpinnerNumberModel(2008,2008,2020,1);//允许用户对数值进行微调,起始值,最小值,最大值,增值
SpinnerNumberModel snm2 = new SpinnerNumberModel(9,1,31,1);
SpinnerListModel slm = new SpinnerListModel();
ArrayList list = new ArrayList();
JSpinner [] spinnerArray = {new JSpinner(snm1),new JSpinner(slm),new JSpinner(snm2)};//创建微调数组
JLabel jl = new JLabel("您预定的机票的日期为:");
JLabel[] labelArray = {new JLabel("选择年:"),new JLabel("选择月:"),new JLabel("选择日:")};
public SpinnerTest()
{
this.add(jl,BorderLayout.SOUTH);
this.add(jp);
for(int i=1;i<=12;i++)
{
list.add(i+"月");
}
slm.setList(list);
slm.setValue("9月");
for(int i=0;i<spinnerArray.length;i++)
{
labelArray[i].setBounds(30+120*i,60,50,40);
jp.add(labelArray[i]);
spinnerArray[i].setBounds(90+130*i,60,70,40);
spinnerArray[i].addChangeListener(this);
jp.add(spinnerArray[i]);
}
this.setTitle("选择机票日期实例");
this.setBounds(200,200,450,150);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void stateChanged(ChangeEvent a)
{
int year = ((Integer)(spinnerArray[0].getValue())).intValue();
String month = (String)(spinnerArray[1].getValue());
int day = ((Integer)(spinnerArray[2].getValue())).intValue();
jl.setText("您预订机票的日期是:"+year+"月"+month+day+"日");
}
public static void main(String args[])
{
new SpinnerTest();
}
}