Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I disable keyboard and mouse entry for a JSpinner?

When I try to make a JSpinner un-editable by keyboard or mouse like this:

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

It disables any keyboard entry and pasting, but I can still click the up/down buttons and change the value.

How do I disable the up/down buttons?

like image 716
Brian Avatar asked Aug 01 '11 20:08

Brian


1 Answers

If the spinner uses a JSpinner.DefaultEditor or its subclass, then the following code works (keyboard navigation disabled, spinner buttons do not work, yet it is possible to select and copy the value displayed in the 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 );
}

If the spinner has a custom editor with something other then JTextComponent, then it is probably still possible to use the same approach (disable the spinner, re-enable the actual component used by the spinner editor, mark that component as read-only using its API).

like image 174
Oleg Estekhin Avatar answered Oct 12 '22 23:10

Oleg Estekhin