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