Re: JSpinner + SpinnerDateModel not working as expected
"Matthias Kaeppler" <void@void.com> wrote in message news:e3kcli$7rt$01$1@news.t-online.com...
Hi,
I want to perform a supposedly simple (?) task:
I need the client to select a timespan in which a certain taks is to be performed. Therefore, I
have create 4 JSpinners with SpinnerDateModelS, in order to let the user select a start date, a
start time, an end date and an end time.
Of course, I want the Spinners to roll the date according to its displayed granularity, e.g. in
the date fields by DAY_OF_MONTH and in the time fields by MINUTE.
However, regardless to which value I set the calendarField attribute of the SpinnerDateModelS,
when spinning the dates/times with the spinners, the unit is always DAY_OF_MONTH.
If I manually check the amount of change performed by getPreviousValue() and getNextValue() (which
I suppose are called when someone spins the field?!), then the amount of change is correct (that
means as indicated by calendarField).
How come? Where is the logic in having a field to specify the amount of change of one spin, when
it is simply ignored when I actually spin the field? Ain't the getPreviousValue() and
getNextValue() called by the JSpinner change listeners?
Thanks,
Matthias
bit of info in this thread from a few days ago (link might wrap)
http://groups.google.com.au/group/comp.lang.java.gui/browse_thread/thread/2f3732c87a827525/121926dfdafe3926?hl=en#121926dfdafe3926
you can dummy up a workaround, by setting the caret position to the field you want,
but setting the caretPosition doesn't work on its own
also doesn't work wrapped in a SwingUtilities.invokeLater()
but does work using a timer.
simple demo
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class Testing extends JFrame
{
public Testing()
{
setLocation(400,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
final JSpinner spinner = new JSpinner (new SpinnerDateModel(new
Date(),null,null,Calendar.SECOND));
spinner.setEditor (new JSpinner.DateEditor(spinner,"hh:mm:ss"));
getContentPane().add(spinner);
pack();
ActionListener al = new ActionListener(){
public void actionPerformed(ActionEvent ae){
((JSpinner.DefaultEditor)spinner.getEditor()).getTextField().setCaretPosition(6);}};
javax.swing.Timer timer = new javax.swing.Timer(200,al);
timer.setRepeats(false);
timer.start();
}
public static void main(String[] args){new Testing().setVisible(true);}
}