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.

[3549 byte] By [jowi25a] at [2007-11-27 2:39:32]
# 1
Please post your code using code tags. Select the code, and click the "code" button.
kmangolda at 2007-7-12 3:01:38 > top of Java-index,Java Essentials,Java Programming...
# 2

perhaps a different way might suit

import java.awt.*;

import java.util.*;

import javax.swing.*;

class pei extends JFrame

{

JSpinner spinner;

JSpinner spinner2;

public pei()

{

SpinnerDateModel dateModel =new SpinnerDateModel(new Date(), null, null,Calendar.HOUR);

spinner = new JSpinner(dateModel);

spinner.setEditor(new JSpinner.DateEditor(spinner, "hh:mm a"));

JPanel spinnerPanel = new JPanel();

spinnerPanel.add(new JLabel("Select time"));

spinnerPanel.add(spinner);

SpinnerDateModel dateModel2 =new SpinnerDateModel(new Date(), null, null,Calendar.HOUR);

spinner2 = new JSpinner(dateModel2);

spinner2.setEditor(new JSpinner.DateEditor(spinner, "hh:mm a"));

JPanel spinnerPanel2 = new JPanel();

spinnerPanel2.add(new JLabel("Select time"));

spinnerPanel2.add(spinner2);

JPanel fieldPanel = new JPanel();

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 static void main(String[] args) {new pei();}

}

Michael_Dunna at 2007-7-12 3:01:38 > top of Java-index,Java Essentials,Java Programming...
# 3
Thanks, that renders properly. Still don't know why mine did not, but I'll leave that as a mystery.Thanks again,John
jowi25a at 2007-7-12 3:01:38 > top of Java-index,Java Essentials,Java Programming...