This works in Java 1.7.0_51, in Windows and Linux. I don't have the ability to test it in OS X.
JSpinner.DefaultEditor editor =
(JSpinner.DefaultEditor) spinner.getEditor();
editor.getTextField().addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent event) {
final JTextField textField = (JTextField) event.getComponent();
EventQueue.invokeLater(new Runnable() {
public void run() {
EventQueue.invokeLater(new Runnable() {
public void run() {
textField.selectAll();
}
});
}
});
}
});
Side note: Have you considered replacing your three JSpinners with a single JSpinner like this?
JSpinner spinner = new JSpinner(new SpinnerDateModel());
spinner.setEditor(new JSpinner.DateEditor(spinner, "MM/dd/yyyy"));
The up/down arrow buttons (and arrow keys) will change whichever field contains the text cursor.
It won't solve your focus issue, but you may decide that the issue is less of an issue.