概要

JSpinnerのモデルで値が最大、最小を超えるとループするように設定します。

サンプルコード

spinner03.setModel(new SpinnerNumberModel(20, 0, 59, 1) {
  @Override public Object getNextValue() {
    Object n = super.getNextValue();
    return Objects.nonNull(n) ? n : getMinimum();
  }
  @Override public Object getPreviousValue() {
    Object n = super.getPreviousValue();
    return Objects.nonNull(n) ? n : getMaximum();
  }
});
view all

解説

上記のサンプルでは、各モデルのgetNextValue()getPreviousValue()メソッドをオーバーライドすることでループするように設定しています。

  • 数値: SpinnerNumberModel
    • SpinnerNumberModel#getNextValue()などがnullになる場合、SpinnerNumberModel#getMinimum()で最小値を取得してループ
  • リスト: SpinnerListModel
    • SpinnerListModel#getNextValue()などがnullになる場合、SpinnerListModel#getList()#get(0)でリスト先頭の取得してループ
spinner04.setModel(new SpinnerListModel(weeks) {
  @Override public Object getNextValue() {
    Object o = super.getNextValue();
    return Objects.nonNull(o) ? o : getList().get(0);
  }
  @Override public Object getPreviousValue() {
    List l = getList();
    Object o = super.getPreviousValue();
    return Objects.nonNull(o) ? o : l.get(l.size() - 1);
  }
});

参考リンク

コメント