Как отключить ввод клавиатуры и мыши для 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());