Как отключить ввод клавиатуры и мыши для JSpinner?

Когда я пытаюсь сделать JSpinner недоступным для редактирования с помощью клавиатуры или мыши, например:

((DefaultEditor) mySpinner.getEditor()).getTextField().setEditable(false);
mySpinner.setEnabled(false);

Он отключает любой ввод с клавиатуры и вставку, но я все равно могу нажимать кнопки вверх/вниз и изменять значение.

Как отключить кнопки вверх/вниз?


person Brian    schedule 01.08.2011    source источник


Ответы (1)


Если счетчик использует JSpinner.DefaultEditor или его подкласс, то работает следующий код (навигация с помощью клавиатуры отключена, кнопки счетчика не работают, но можно выбрать и скопировать значение, отображаемое в счетчике).

JSpinner component = ...;

component.setEnabled( false );
if ( component.getEditor() instanceof JSpinner.DefaultEditor ) {
   JSpinner.DefaultEditor editor = ( JSpinner.DefaultEditor ) component.getEditor();
   editor.getTextField().setEnabled( true );
   editor.getTextField().setEditable( false );
}

Если у счетчика есть пользовательский редактор с чем-то другим, кроме JTextComponent, то, вероятно, все еще можно использовать тот же подход (отключить счетчик, снова включить фактический компонент, используемый редактором счетчика, пометить этот компонент как доступный только для чтения, используя его API).

person Oleg Estekhin    schedule 22.08.2011