---
category: swing
folder: ReverseDirectionSpinner
title: JSpinnerの矢印ボタンによる増減方向を入れ替える
tags: [JSpinner, SpinnerNumberModel, SpinnerListModel]
author: aterai
pubdate: 2020-07-20T02:56:59+09:00
description: JSpinnerの矢印ボタンをクリックした場合の値の増減、または前次の方向を入れ替えます。
image: https://drive.google.com/uc?id=1j0E3gvCn6ljBBqAu6CjIbunUZwhW2h0s
---
* 概要 [#summary]
`JSpinner`の矢印ボタンをクリックした場合の値の増減、または前次の方向を入れ替えます。

#download(https://drive.google.com/uc?id=1j0E3gvCn6ljBBqAu6CjIbunUZwhW2h0s)

* サンプルコード [#sourcecode]
#code(link){{
JSpinner spinner0 = new JSpinner(new SpinnerNumberModel(5, 0, 10, 1));

JSpinner spinner1 = new JSpinner(new SpinnerNumberModel(5, 0, 10, -1));

String[] scale = {
  "AAA", "AA+", "AA", "AA-", "A+", "A", "A-",
  "BBB+", "BBB", "BBB-", "BB+", "BB", "BB-", "B+", "B", "B-",
  "CCC+", "CCC", "CCC-", "CC", "R", "D"
};
JSpinner spinner2 = new JSpinner(new SpinnerListModel(scale));

JSpinner spinner3 = new JSpinner(new SpinnerListModel(scale) {
  @Override public Object getNextValue() {
    return super.getPreviousValue();
  }

  @Override public Object getPreviousValue() {
    return super.getNextValue();
  }
});
}}

* 解説 [#explanation]
- `stepSize: 1`
-- `SpinnerNumberModel`でシーケンスの要素間の差を正の値に設定
- `stepSize: -1`
-- `SpinnerNumberModel`でシーケンスの要素間の差を負の値に設定
-- `getNextValue()`メソッドと`getPreviousValue()`メソッドによって計算される値変更のサイズがマイナスになるので上矢印ボタンをクリックすると数値は減少、下矢印ボタンで増加に入れ替わる
- `SpinnerListModel`
-- デフォルト
-- 上矢印ボタンのクリックで前の値、下矢印ボタンで次の値を返す
-- デフォルト
- `Reverse direction SpinnerListModel`
-- `SpinnerListModel#getNextValue()`メソッドと`SpinnerListModel#getPreviousValue()`メソッドを入れ替えるようオーバーライドして上矢印ボタンのクリックで次の値、下矢印ボタンで前の値を返すよう変更

* 参考リンク [#reference]
- [http://www.java2s.com/Code/Java/Swing-JFC/Aprogramtotestspinners.htm A program to test spinners. : Spinner « Swing JFC « Java]
- [https://stackoverflow.com/questions/61658679/java-jspinner-increase-value-with-down-arrow swing - Java JSpinner increase value with down arrow - Stack Overflow]
- [[JSliderの順序を反転>Swing/InvertedSlider]]

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