Java - Как я могу получить индекс выбранного элемента JSpinner?

У меня есть элемент управления JSpinner со случайными значениями. Значения могут дублироваться. Например :

{ 1, 2, 9, 3, 4, 5, 9, 6, 7, 3, 2, 9 }

Если пользователь выбрал значение 9, то как я могу отличить его от других 9 в JSpinner, потому что моя программа будет выполнять некоторые вычисления в зависимости от индекса выбранной 9.

Мое решение состоит в том, чтобы получить индекс выбранного элемента в JSpinner, чтобы узнать, что это за элемент. Возможно ли это?


person Brad    schedule 08.09.2015    source источник
comment
@cesarluis Этот ответ не сработает. В этом примере, если значение равно 9, то возвращаемый индекс всегда будет равен 2, даже если выбран индекс 7 или индекс 11.   -  person markbernard    schedule 08.09.2015
comment
Либо используйте вместо этого JList, либо вам придется получить SpinerModel и продолжать вызывать getNextValue и сравнивать результаты с исходным списком, пока не выясните, где вы находитесь.   -  person markbernard    schedule 08.09.2015
comment
@markbernard .. Ты прав. Предлагаемое решение для cesarluis всегда будет возвращать индекс первых 9. Я думал об использовании getNextValue и getPreviousValue, но это будет очень сложно. Я надеюсь, что есть более простой способ.   -  person Brad    schedule 08.09.2015
comment
@Брэд, извини, я был неправ, я не уделял должного внимания. Теперь я думаю о подсчете кликов вверх и вниз / смене слушателей. Возможно, этот подход полезен. stackoverflow.com/questions/5184639 /. Проблема заключается в том, что дубликаты очень близки, поэтому вы можете создать буфер близких значений или контролировать свои комбинации.   -  person cesarluis    schedule 08.09.2015
comment
Я бы использовал JComboBox, тогда вы просто используете метод getSelectedIndex(). I thought about using getNextValue & getPreviousValue, — что, если пользователь не использует клавиши со стрелками, а вместо этого вводит значение?   -  person camickr    schedule 08.09.2015


Ответы (2)


jspiner.getValue() даст вам значение выбранного элемента, вы можете делать с ним что угодно, зачем вам знать его индекс? сформировать документ Java для SpinnerModel

Модель не поддерживает индексированный произвольный доступ к элементам последовательности. Одновременно доступны только три значения последовательности: текущее, следующее и предыдущее.

person ThaSaleni    schedule 08.09.2015

После проб и ошибок я нашел лучшее решение для моего случая, и я делюсь им здесь на случай, если у кого-то будет такой же сценарий. Я добавил пробелы перед каждым повторяющимся числом в счетчике, чтобы узнать, какой из них это, и сделать каждое значение в счетчике уникальным, поэтому первые 9 будут {пробел + 9}, вторые 9 будут {2 пробела + 9}, а третья 9 будет {3 пробела + 9}.

Добавление пробелов в счетчик не будет проблемой для пользователя, и я думаю, что могу сделать редактор счетчика недоступным для редактирования, поэтому, если пользователь попытается ввести значения вручную, он не испортит ситуацию.

person Brad    schedule 09.09.2015