Как отключить ввод с клавиатуры и мыши для JSpinner? - PullRequest
6 голосов
/ 02 августа 2011

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Если счетчик использует 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).

0 голосов
/ 28 октября 2015
// 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());
...