• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JSpinnerのモデルの値をループさせる
#navi(../)
RIGHT:Posted by [[terai]] at 2010-02-01
*JSpinnerのモデルで値が最大、最小を超えるとループするように設定します。 [#t324de89]
---
category: swing
folder: CyclingSpinnerModel
title: JSpinnerのモデルの値をループさせる
tags: [JSpinner, SpinnerNumberModel]
author: aterai
pubdate: 2010-02-01T01:53:39+09:00
description: JSpinnerのモデルで値が最大、最小を超えるとループするように設定します。
image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTKYcCKxAI/AAAAAAAAAV4/T8OdovAF6EY/s800/CyclingSpinnerModel.png
---
* 概要 [#summary]
`JSpinner`のモデルで値が最大、最小を超えるとループするように設定します。

-&jnlp;
-&jar;
-&zip;
#download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTKYcCKxAI/AAAAAAAAAV4/T8OdovAF6EY/s800/CyclingSpinnerModel.png)

#screenshot

**サンプルコード [#ld341dbc]
#code{{
spinner.setModel(new SpinnerNumberModel(20, 0, 59, 1) {
  public Object getNextValue() {
* サンプルコード [#sourcecode]
#code(link){{
spinner03.setModel(new SpinnerNumberModel(20, 0, 59, 1) {
  @Override public Object getNextValue() {
    Object n = super.getNextValue();
    if(n==null) n = getMinimum();
    return n;
    return Objects.nonNull(n) ? n : getMinimum();
  }
  public Object getPreviousValue() {

  @Override public Object getPreviousValue() {
    Object n = super.getPreviousValue();
    if(n==null) n = getMaximum();
    return n;
    return Objects.nonNull(n) ? n : getMaximum();
  }
});
}}

**解説 [#m44dfbfa]
上記のサンプルでは、各モデルのgetNextValue、getPreviousValueメソッドをオーバーライドすることでループするように設定しています。
* 解説 [#explanation]
上記のサンプルでは、各`SpinnerModel`の`getNextValue()`、`getPreviousValue()`メソッドをオーバーライドすることで、例えば下限値に達した場合は上限値にループするよう設定しています。

**参考リンク [#w63c8b19]
- [[Creating Custom Spinner Models and Editors>http://java.sun.com/docs/books/tutorial/uiswing/components/spinner.html#model]]
- 数値モデル(`SpinnerNumberModel`)
-- `SpinnerNumberModel#getNextValue()`などが`null`になる場合`SpinnerNumberModel#getMinimum()`で最小値を取得してループ
- リストモデル(`SpinnerListModel`)
-- `SpinnerListModel#getNextValue()`などが`null`になる場合`SpinnerListModel#getList()#get(0)`でリスト先頭の取得してループ
#code{{
spinner04.setModel(new SpinnerListModel(weeks) {
  @Override public Object getNextValue() {
    Object o = super.getNextValue();
    return Objects.nonNull(o) ? o : getList().get(0);
  }

**コメント [#d1f3740f]
  @Override public Object getPreviousValue() {
    List l = getList();
    Object o = super.getPreviousValue();
    return Objects.nonNull(o) ? o : l.get(l.size() - 1);
  }
});
}}

* 参考リンク [#reference]
- [https://docs.oracle.com/javase/tutorial/uiswing/components/spinner.html#model Creating Custom Spinner Models and Editors]

* コメント [#comment]
#comment
#comment