JSpinner心得和范例!!

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

JSpinner 示例
图 1. 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:用于接受已设定好步长的一定范围内的数字( intdouble)的输入。

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



===============================================================

自己使用中的心得:在文本筐里更改内容为范围外的数字或者说异常数字(比如范围在0~100之间,我输入的是101),JSpinner.getValue()得到的是上一次保存的正确值;再比如 输入正常的数字“15”,回车,然后把这一栏清空,回车。JSpinner.getValue()可以得到15,而不是返回null或者出现异常。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSpinner是一个Swing组件,用于显示和编辑数字或日期值。它可以让用户通过鼠标或键盘输入来改变值,也可以通过代码来设置它的值。 以下是JSpinner的基本用法: 1. 创建JSpinner对象 使用JSpinner的构造函数来创建一个JSpinner对象,例如: ``` JSpinner spinner = new JSpinner(); ``` 2. 设置SpinnerModel 使用SpinnerModel来设置JSpinner的值范围和步长。可以使用SpinnerNumberModel、SpinnerListModel和SpinnerDateModel等现成的模型,也可以创建自定义的SpinnerModel。例如: ``` SpinnerModel model = new SpinnerNumberModel(0, 0, 100, 1); JSpinner spinner = new JSpinner(model); ``` 这里创建了一个初始值为0,最小值为0,最大值为100,步长为1的JSpinner。 3. 添加JSpinner到容器 将JSpinner添加到Swing容器中,例如: ``` JPanel panel = new JPanel(); panel.add(spinner); ``` 4. 获取和设置JSpinner的值 使用getValue()方法获取JSpinner的当前值,使用setValue(Object value)方法设置JSpinner的值,例如: ``` Object value = spinner.getValue(); spinner.setValue(10); ``` 5. 监听JSpinner的变化 可以添加ChangeListener来监听JSpinner值的变化,例如: ``` spinner.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { Object value = spinner.getValue(); System.out.println("JSpinner value changed to: " + value); } }); ``` 这里为JSpinner添加了一个ChangeListener,当JSpinner的值发生变化时,会输出一个消息。 以上就是JSpinner的基本用法。JSpinner还有很多高级用法,例如自定义Editor、Renderer和Model等,可以根据需要进行学习和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值