запрет писать в JSpinner swing
Как сделать так, чтобы в JSpinner вручную нельзя было вводить текст.
Пробовал
spinner.setFocusable(false);
Но это не работает
Ответы (1 шт):
Автор решения: Михаил Ребров
→ Ссылка
Компонент JSpinner в составе имеет редактор, который в свою очередь в своем составе имеет обычное текстовое поле.
Вам необходимо:
- Получить редактор (с помощью метода
getEditor()) - Чтобы иметь дело не с
JComponent, а конкретной реализацией редактора, вам необходимо привести полученное значение к типу редактора по умолчанию(JSpinner.DefaultEditor) - Из редактора Вы уже можете получить свое текстовое поле (
getTextField()) - И уже на нем запретить редактирование(
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