17

I am creating time picker using a JSpinner. The text inside the JSpinner is editable. But I want to set the JSpinner as non editable, because there is the chance to give an invalid value. Can anyone help me?

msrd0
  • 7,816
  • 9
  • 47
  • 82
Arivu2020
  • 2,485
  • 7
  • 25
  • 24
  • Can you comment on jfpoilpret's answer if it helped or not? And if it did, accept it as the correct one? – fish May 27 '10 at 06:43

3 Answers3

30

Try the following:

JSpinner spinner = ...;
((DefaultEditor) spinner.getEditor()).getTextField().setEditable(false);

This should work as long as you didn't change the spinner editor yourself by calling spinner.setEditor(...).

Tell us if this helps.

jfpoilpret
  • 10,449
  • 2
  • 28
  • 32
  • I modified your code,It works Fine. JSpinner ampm=new JSpinner(); JFormattedTextField ampmspin=((JSpinner.DefaultEditor)ampm.getEditor()).getTextField(); ampmspin.setEditable(false); Thank you very much......... – Arivu2020 Jun 16 '10 at 12:18
  • 2
    I had to add this after I set the spinner's list model. Then it worked. – Justin Wiseman Sep 15 '12 at 14:23
  • 1
    When I try this, the spinner can still be edited by click the arrow! – yelliver Feb 04 '17 at 03:25
13

A bit shorter:

JSpinner spinner = new JSpinner();
spinner.setEditor(new JSpinner.DefaultEditor(spinner));
Adam Stelmaszczyk
  • 19,665
  • 4
  • 70
  • 110
0

When I try this, the spinner can still be edited by click the arrow! – yelliver

You can try setting the step to 0:

mySpinner.setModel(new SpinnerNumberModel(yourDefaultDisplayValue, minValue, maxValue, step));

You can explore the other spinner models and do the same trick I guess.