知识大全 Swing指南:Spinner Model Controls(组图)

Posted 属性

篇首语:入于污泥而不染不受资产阶级糖衣炮弹的侵蚀,是最难能可贵的革命品质。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Swing指南:Spinner Model Controls(组图)相关的知识,希望对你有一定的参考价值。

Swing指南:Spinner Model Controls(组图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  JSpinner工作起来好像是在JList或者JComboBox中间放了一个JFormattedTextField 在JList或者JComboBox中 用户可以提前设定好要输入的值 JSpinner也提供这样的一种机制 这个控件的另一个部分是JFormattedTextField 如何显示和输入不由那些小的控制格控制 比如JList 相反 可以通过JFormattedTextField来输入或通过边上的两个小箭头来浏览不同的可用的值     图示 显示了Spinner伴随不同的输入类型是什么样子 图示 的顶端的JSpinner是一个用来显示法语星期 通过SpinnerListModel 中间的 是一个通过SpinnerDateModel显示日期的JSpinner 底部的是使用SpinnerNumberModel的JSpinner 每一个都是通过各自神秘的方式 在本文的后面我们将要学习    >    要创建和操纵JSpinner 许多类都将被调用 最重要的是JSpinner自己 最重要的两个准素集包括SpinnerModel接口 包括可选择的集合中的选项 还有 JSpinner DefaultEditor的实现 用来捕获所有选择 庆幸的是 许多其它调用的类都是在后台工作的 比如 一旦你给SpinnerNumberModel提供了数字的范围 并且用这个类来协助Spinner 你的工作实际上是完成了      创建JSpinner控件    JSpinner类包括两个构造函数来初始化控件     public JSpinner()  JSpinner spinner = new JSpinner();  public JSpinner(SpinnerModel model)  SpinnerModel model = new SpinnerListModel(args);  JSpinner spinner = new JSpinner(model);    开始的时候可以没有数据模型 后面可以使用它来跟踪JSpinner的方法 另一个方法 在创建这个控件的时候使用完整的模型 实现SpinnerModel接口 它里面有三个具体的子类可以使用 SpinnerDateModel SpinnerListModel和SpinnerNumberModel 伴随着他们的抽象父类AbstractSpinnerModel 如果不指名模型 那么SpinnerNumberModel将默认使用 而显示和编辑的控件是JFormattedTextField 编辑的基本功能是通过一系列JSpinner的内部类实现的 DateEditor ListEditor和NumberFormat 还有父类中DefaultEditor的支持      JSpinner属性    除了创建JSpinner对象之外 你还可以通过表一中的九个属性中的一个来进行配置      >  value属性中的值允许你更改当前控件的设置 nextValue和perviousValue可以使你以不同的方向察看模型中的入口     使用ChangeListener来监听JSpinner events    JSpinner直接支持一种事件监听 changeListener 在别的地方 当mitEdit()方法被调用 这个事件将被触发 告诉你spinner的值发生改变 为了证明 列表 联系到一个自定义的ChangeListener 与图示 的程序相关联     列表 JSpinner with ChangeListener  import java awt *;  import javax swing *;  import javax swing event *;  import java text *;  import java util *;  public class SpinnerSample   public static void main (String args[])   Runnable runner = new Runnable()   public void run()   JFrame frame = new JFrame( JSpinner Sample );  frame setDefaultCloseOperation(JFrame EXIT_ON_CLOSE);  DateFormatSymbols symbols =  new DateFormatSymbols(Locale FRENCH);  ChangeListener listener = new ChangeListener()   public void stateChanged(ChangeEvent e)   System out println( Source: + e getSource());    ;  String days[] = symbols getWeekdays();  SpinnerModel model = new SpinnerListModel(days);  JSpinner spinner = new JSpinner(model );  spinner addChangeListener(listener);  JLabel label = new JLabel( French Days/List );  JPanel panel = new JPanel(new BorderLayout());  panel add(label BorderLayout WEST);  panel add(spinner BorderLayout CENTER);  frame add(panel BorderLayout NORTH);  SpinnerModel model = new SpinnerDateModel();  JSpinner spinner = new JSpinner(model );  spinner addChangeListener(listener);  JLabel label = new JLabel( Dates/Date );  JPanel panel = new JPanel(new BorderLayout());  panel add(label BorderLayout WEST);  panel add(spinner BorderLayout CENTER);  frame add(panel BorderLayout CENTER);  SpinnerModel model = new SpinnerNumberModel();  JSpinner spinner = new JSpinner(model );  spinner addChangeListener(listener);  JLabel label = new JLabel( Numbers );  JPanel panel = new JPanel(new BorderLayout());  panel add(label BorderLayout WEST);  panel add(spinner BorderLayout CENTER);  frame add(panel BorderLayout SOUTH);  frame setSize( );  frame setVisible (true);    ;  EventQueue invokeLater(runner);      运行这个程序可以示范listener的用法(当然 你也会发现更多关于ChangeListener的有意义的方法)      定制JSpinner的外观    同所有的Swing控件 JSpinner在不同的系统定义look and feel类型下 拥有不同的外观 如示图 这个控件期初看起来像一个textfield 不同点是绘制了两个箭头    >  集合中的 个UIResource属性在表格 中列举 有限的方法绘制text field和箭头     Table JSpinner UIResource 元素      SpinnerModel 接口    到目前 我们已经看到了如何同一个主JSpinner类连接 SpinnerModel接口是控件的数据模型 SpinnerModel的定义如下     public interface SpinnerModel   // Properties  public Object getValue();  public void setValue(Object);  public Object getNextValue();  public Object getPreviousValue();  // Listeners  public void addChangeListener(ChangeListener);  public void removeChangeListener(ChangeListener);      SpinnerModel中的六个方法直接绘制了JSpinner 而JSpinner的方法间接调用模块中的方法 在监听的状况下 事件将联系到监听器      AbstractSpinnerModel类    AbstractSpinnerModel类基本要实现的是SpinnerModel接口 它提供了管理和通知的监听列表 子类必须实现接口中的四个方法 SpinnerModel中的三个具体实现如下 SpinnerDateModel SpinnerListModel和SpinnerNumberModel      SpinnerDateModel类    从名字可以推断出 SpinnerDateModel提供了数据的选择 这个类有两个构造函数 一个默认选择所有的数据 另一个要求你给出范围     public SpinnerDateModel()SpinnerModel model = new SpinnerDateModel();JSpinner spinner = new JSpinner(model);public SpinnerDateModel(Date value Comparable start Comparable end   int calendarField)Calendar cal = Calendar getInstance();Date now = cal getTime();cal add(Calendar YEAR );Date startDate = cal getTime();cal add(Calendar YEAR );Date endDate = cal getTime();SpinnerModel model =  new SpinnerDateModel(now startDate endDate Calendar YEAR);JSpinner spinner = new JSpinner(model);    如果不指名任何参数 就没有开始和结束点 下面的例子展示了使用参数来表示 年的范围 最后一个成员变量应该是Calendar类中的一个定值   ·    Calendar AM_PM  ·    Calendar DAY_OF_MONTH  ·    Calendar DAY_OF_WEEK  ·    Calendar DAY_OF_WEEK_IN_MONTH  ·    Calendar DAY_OF_YEAR  ·    Calendar ERA  ·    Calendar HOUR  ·    Calendar HOUR_OF_DAY  ·    Calendar MILLISECOND  ·    Calendar MINUTE  ·    Calendar MONTH  ·    Calendar SECOND  ·    Calendar WEEK_OF_MONTH  ·    Calendar WEEK_OF_YEAR  ·    Calendar YEAR    注意 SpinnerDateModel不包含任何Calendar类中的时间域 所以不能通过SpinnerDateModel在JSpinner中翻转     表格 列出了SpinnerModel中的三个属性 四个关于SpinnerDateModel      >  典型地 唯一的新属性中你将要用来获得最终的日期 尽管所有的结果都被包裹在getValue()中 以适当的数据类型 如果在构造函数中提供了数据的表示范围 那么previous和next的值将是null 在边界条件下      SpinnerListModel    SpinnerListModel提供了从一个入口列表中选择或者至少是字符串表述 这个类有三个构造函数     public SpinnerListModel()SpinnerModel model = new SpinnerListModel();  JSpinner spinner = new JSpinner(model);  public SpinnerListModel(List<?> values)List<String> list = args;  SpinnerModel model = new SpinnerListModel(list);  JSpinner spinner = new JSpinner(model);  public SpinnerListModel(Object[] values)SpinnerModel model = new SpinnerListModel(args);  JSpinner spinner = new JSpinner(model);    当没有参数提供时 这个模型包括一个元素 字符串empty List版保留一个对list的引用 而不是list的拷贝 如果改变了list 那么模型中的list也将改变 数组版本的创建了一个私有的内部类 并且实例化一个list 对于list和数组版本 初始选择的是第一个元素 否则将抛出一个IllegalArgumentException异常     如表格 显示 属性中增添的是set和get list      >   SpinnerNumberModel类    SpinnerNumberModel提供了从一个开区间或闭区间选择数字的模式 数字可以使Number类的所有子类 包括Integer和Double 他有四个构造函数     public SpinnerNumberModel()SpinnerModel model = new SpinnerNumberModel();  JSpinner spinner = new JSpinner(model);  public SpinnerNumberModel(double value double minimum double maximum   double stepSize)SpinnerModel model = new SpinnerNumberModel( );  JSpinner spinner = new JSpinner(model);  public SpinnerNumberModel(int value int minimum int maximum int stepSize)SpinnerModel model = new SpinnerNumberModel( );  JSpinner spinner = new JSpinner(model);  public SpinnerNumberModel(Number value Comparable minimum Comparable maximum   Number stepSize)Number value = new Integer( );  Number min = new Integer( );Number max = new Integer( );  Number step = new Integer( );SpinnerModel model = new SpinnerNumberModel(value min max step);  JSpinner spinner = new JSpinner(model);    如果最大或最小值为null 则为开区间 对于没有参数的 初始值为 步进为 步进是整形的 如果你设为 那么将不会完成     表格 展示了SpinnerNumberModel的属性      >   自定义模型    一般来说 可用的JSpinner模型已经足够了 所以没有必要创建他的子类了 但是 并不是所有场合都能满足 比如 你可能希望使用一个包装了SpinnerListModel的模型 代替停止在第一个或最后一个元素 他包装了另一个结束 在列表 中给出了具体实现     Listing RolloverSpinnerListModel 类    import javax swing *;  import java util *;  public class RolloverSpinnerListModel extends SpinnerListModel   public RolloverSpinnerListModel(List values)   super(values);    public RolloverSpinnerListModel(Object[] values)   super(values);    public Object getNextValue()   Object returnValue = super getNextValue();  if (returnValue == null)   returnValue = getList() get( );    return returnValue;    public Object getPreviousValue()   Object returnValue = super getPreviousValue();  if (returnValue == null)   List list = getList();  returnValue = list get(list size() );    return returnValue;       JSpinner编辑器    对于JSpinner每个可用的模型 一个次要的支持类 JSpinner的一个内部类 然而这个模块可以控制控件是否可选 JSpinner编辑器允许你控制如何显示和编辑每个可选的值      JSpinner DefaultEditor类    JSpinner的setEditor()方法允许你将任何Jponent作为JSpinner的编辑器 当然你可以那样做 更典型的是 你将用JSpinner DefaultEditor的子类作运行 以JformattedTextField作为简单的编辑器工作 将提供所有你需要的基本功能 它包括一个基本的构造函数     public JSpinner DefaultEditor(JSpinner spinner)JSpinner spinner = new JSpinner();  JComponent editor = JSpinner DefaultEditor(spinner);  spinner setEditor(editor);    在表格 中可以看到 有两个属性      >  在不知道使用的是哪个模型工作的情况下 在这个级别的你可以做的是改变JformattedTextField中的文字显示 更典型的是 你将改变模型编辑器的某些自定义方面      JSpinner DateEditor类    DateEditor允许你定制不同的日期显示方式 使用java text包中SimpleDateFormat类 察看Javadoc了解更多的关于SimpleDateFormat的可用格式模式 如果你不喜欢默认的地显示方式 可以通过给构造函数的第二个参数传递一个新参数来改变显示模式     public JSpinner DateEditor(JSpinner spinner)SpinnerModel model = new SpinnerDateModel();  JSpinner spinner = new JSpinner(model);JComponent editor = JSpinner DateEditor(spinner);  spinner setEditor(editor);  public JSpinner DateEditor(JSpinner spinner String dateFormatPattern)SpinnerModel model = new SpinnerDateModel();  JSpinner spinner = new JSpinner(model);  JComponent editor = JSpinner DateEditor(spinner MMMM yyyy );  spinner setEditor(editor);    默认情况 格式是M/d/yy h:mm a或者 / / : PM 代表 年的圣诞节的某个时间 后面的例子将要显示 December     编辑器的两个属性在表格 中      >   JSpinner ListEditor类    当使用SpinnerListModel类工作时 ListEditor不支持任何特殊格式 而是提供了前置类型支持 既然模块的所有入口都知道了 编辑器将尝试匹配用户输入的字符 这里只有一个构造函数 但是你可能几乎用不到     public JSpinner ListEditor(JSpinner spinner)    在表格 中将看到ListEditor只有一个属性    >   JSpinner NumberEditor类    NumberEditor和DateEditor的工作方式很相似 允许你输入定制的显示模式 代替SimpleDateFormat工作 NumberEditor可以协助java text包中的DecimalFormat类 就像DateEditor一样 他又两个构造函数     public JSpinner NumberEditor(JSpinner spinner)SpinnerModel model = new SpinnerNumberModel( );JSpinner spinner = new JSpinner(model);JComponent editor = JSpinner NumberEditor(spinner);spinner setEditor(editor);public JSpinner NumberEditor(JSpinner spinner String decimalFormatPattern)SpinnerModel model = new SpinnerNumberModel( );JSpinner spinner = new JSpinner(model);JComponent editor = JSpinner NumberEditor(spinner # ## ### );spinner setEditor(editor);    第二个构造函数使用默认的字符串格式 如果数字太大 将使用逗号 如果结果是一个完整的数 将不会用十进制显示     表格 中 显示editor的两个属性      >   总结    在这篇文章中 你学习到了Swing中的JSpinner控件 当你要控制某些选择在一定的范围中时 JSpinner可以让你通过翻滚来选择需要的值 你学习到了如何提供这些要选择的值 通过使用SpinnerDateModel和DateEditor SpinnerListModel和ListEditor SpinnerNumberModel和NumberEditor来设置日期 cha138/Article/program/Java/hx/201311/26070

相关参考

知识大全 Model 2

ASP.NETMVC4框架揭秘:Model2  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 MVC与Model 2

ASP.NETMVC4框架揭秘:MVC与Model2  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 PetShop——数据类库Model

PetShop——数据类库Model  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 关于MVC&Model2&Struts的一点看法

关于MVC&Model2&Struts的一点看法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Model View Controller 与 Observer

ModelViewController与Observer  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 ASP.NET MVC 4框架揭秘:Controller与Model的分离

ASP.NETMVC4框架揭秘:Controller与Model的分离  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶

知识大全 我小时候看过的一部电影,讲一个女Model,有条项链,戴上就变成真人,拿下就变成假人,这部电影叫什么啊?

我小时候看过的一部电影,讲一个女Model,有条项链,戴上就变成真人,拿下就变成假人,这部电影叫什么啊?  以下文字资料是由(本站网www.cha138.com)小编为大

知识大全 java swing 9.27 课程

  /**  *  Title:swing概观  *  Description:swing初步知识  *  Copyright:eclipse(c)  *  */  一swing的概观    swin

知识大全 Swing组件

Swing组件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Swing组件      Swin

知识大全 Swing资源

Swing资源  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  开始学习Swing的最好方法是学习