JSpinner not rendering properly
The following code does not work as expected. I have 2 JSpinners created similarly. Whichever spinnerPanel I add using "South" comes up with the data and time instead of just hh:mm a. If I switch the to spinnerPanels and add the other to the "South" that spinnerPanel comes up with the date and time also. As soon as you change it, it switches to hh:mm a. Anyone have any ideas? This code should compile and run.
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
public class pei extends JFrame implements ChangeListener {
JSpinner spinner;
JTextField textField;
DateFormatter formatter;
JSpinner spinner2;
JTextField textField2;
DateFormatter formatter2;
public pei() {
SimpleDateFormat dateFormat =
new SimpleDateFormat("hh:mm a");
GregorianCalendar calendar = new GregorianCalendar();
Date now = calendar.getTime();
SpinnerDateModel dateModel =
new SpinnerDateModel(now, null, null,
Calendar.HOUR);
spinner = new JSpinner(dateModel);
spinner.addChangeListener(this);
JFormattedTextField tf =
((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
DefaultFormatterFactory factory =
(DefaultFormatterFactory)tf.getFormatterFactory();
formatter = (DateFormatter)factory.getDefaultFormatter();
formatter.setFormat(dateFormat);
tf.setMargin(new Insets(0,5,0,0));
JPanel spinnerPanel = new JPanel();
spinnerPanel.add(new JLabel("Select time"));
spinnerPanel.add(spinner);
SimpleDateFormat dateFormat2 =
new SimpleDateFormat("hh:mm a");
GregorianCalendar calendar2 = new GregorianCalendar();
Date now2 = calendar2.getTime();
SpinnerDateModel dateModel2 =
new SpinnerDateModel(now2, null, null,
Calendar.HOUR);
spinner2 = new JSpinner(dateModel2);
spinner2.addChangeListener(this);
JFormattedTextField tf2 =
((JSpinner.DefaultEditor)spinner2.getEditor()).getTextField();
DefaultFormatterFactory factory2 =
(DefaultFormatterFactory)tf2.getFormatterFactory();
formatter2 = (DateFormatter)factory2.getDefaultFormatter();
formatter2.setFormat(dateFormat2);
tf2.setMargin(new Insets(0,5,0,0));
JPanel spinnerPanel2 = new JPanel();
spinnerPanel2.add(new JLabel("Select time"));
spinnerPanel2.add(spinner2);
textField = new JTextField(14);
textField.setMargin(new Insets(0,5,0,0));
JPanel fieldPanel = new JPanel();
fieldPanel.add(textField);
getContentPane().add(spinnerPanel2, "North");
getContentPane().add(fieldPanel, "Center");
getContentPane().add(spinnerPanel, "South");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,200);
setLocation(400,200);
setVisible(true);
}
public void stateChanged(ChangeEvent e) {
JSpinner spinner = (JSpinner)e.getSource();
Date date = (Date)spinner.getValue();
String formattedDate;
try {
formattedDate = formatter.valueToString(date);
} catch(ParseException pe) {
System.out.println(pe.toString());
return;
}
textField.setText(formattedDate);
//System.out.println("date = " + formattedDate);
}
public static void main(String[] args) {
new pei();
}
}
Thanks for any assistance.

