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

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

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

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

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

2 ответов


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

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).


// Disabling mouse input without desabling the JSpinner itself
JSpinner spinner = ...;
// set the minimum and maximum values to the current value, 
// thus preventing changes to the spinner's current value
SpinnerNumberModel snm = (SpinnerNumberModel) spinner.getModel();
snm.setMinimum((Integer)spinner.getValue());
snm.setMaximum((Integer)spinner.getValue());