запрет писать в JSpinner swing

Рейтинг: 0Ответов: 1Опубликовано: 07.04.2023

Как сделать так, чтобы в JSpinner вручную нельзя было вводить текст.

Пробовал

spinner.setFocusable(false);

Но это не работает

Ответы

▲ 1

Компонент JSpinner в составе имеет редактор, который в свою очередь в своем составе имеет обычное текстовое поле.

Вам необходимо:

  1. Получить редактор (с помощью метода getEditor())
  2. Чтобы иметь дело не с JComponent, а конкретной реализацией редактора, вам необходимо привести полученное значение к типу редактора по умолчанию(JSpinner.DefaultEditor)
  3. Из редактора Вы уже можете получить свое текстовое поле (getTextField())
  4. И уже на нем запретить редактирование(setEditable(false))

Подробно и по шагам:

JSpinner spinner = new JSpinner();
// получаем редактор
JComponent editorComponent = spinner.getEditor();
// приводим значение JComponent к типу редактора спинера по умолчанию(JSpinner.DefaultEditor)
JSpinner.DefaultEditor editor = (JSpinner.DefaultEditor)editorComponent;
// из редактора получаем текстовое поле (JFormattedTextField)
JFormattedTextField textField = editor.getTextField();
// отключаем редактирование на данном поле
textField.setEditable(false);

Все тоже самое только в одну строку:

((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().setEditable(false);

За основу был взят ответ: https://stackoverflow.com/a/29105457/4558866