2012-03-02 38 views

回答

12

你必須定義兩件事JSpinner(本教程的基本內容完全回答你的問題)

例如

import java.awt.*; 
import java.text.SimpleDateFormat; 
import java.util.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class TimeZoneSpinners { 

    private final String[] zones = {"Asia/Tokyo", "Asia/Hong_Kong", 
     "Asia/Calcutta", "Europe/Paris", "Europe/London", 
     "America/New_York", "America/Los_Angeles" 
    }; 
    private final JLabel[] labels = new JLabel[zones.length]; 
    private final SimpleDateFormat[] formats = new SimpleDateFormat[zones.length]; 
    private JSpinner spinner; 
    private SpinnerDateModel model; 
    private SimpleDateFormat format; 
    private JPanel panel; 
    private JFrame frame = new JFrame(); 

    public void makeUI() { 
     Calendar cal = Calendar.getInstance(); 
     Date date = cal.getTime(); 
     model = new SpinnerDateModel(); 
     model.setValue(date); 
     spinner = new JSpinner(model); 
     spinner.addChangeListener(new ChangeListener() { 

      @Override 
      public void stateChanged(ChangeEvent e) { 
       Date date = (Date) ((JSpinner) e.getSource()).getValue(); 
       for (int i = 0; i < labels.length; i++) { 
        labels[i].setText(formats[i].format(date)); 
       } 
      } 
     }); 
     format = ((JSpinner.DateEditor) spinner.getEditor()).getFormat(); 
     format.setTimeZone(TimeZone.getTimeZone(zones[0])); 
     format.applyPattern("yyyy-MM-dd HH:mm:ss"); 
     panel = new JPanel(new GridLayout(zones.length, 2, 10, 10)); 
     for (int i = 0; i < zones.length; i++) { 
      formats[i] = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); 
      formats[i].setTimeZone(TimeZone.getTimeZone(zones[i])); 
      JLabel label = new JLabel(zones[i]); 
      labels[i] = new JLabel(formats[i].format(date)); 
      panel.add(label); 
      panel.add(labels[i]); 
     } 
     frame.setLayout(new BorderLayout(10, 10)); 
     frame.add(spinner, BorderLayout.NORTH); 
     frame.add(panel, BorderLayout.CENTER); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TimeZoneSpinners().makeUI(); 
      } 
     }); 
    } 
} 
+1

+1不錯....... – 2013-07-31 19:18:43

+0

注意,有一個初始化與這樣的spinners相關的bug,在[這裏]描述(http://stackoverflow.com/questions/37444308/jspinner-dateeditor-in-java-not-respecting-timezone-on-initialization)。如果您在此示例中添加了一個組件,該組件將捕獲來自微調器的初始焦點,則只有在微調器獲得焦點後纔會應用時區格式。 – predi 2016-09-21 11:08:46

6

JSpinner.DateEditor組件使用與SimpleDateFormat相同的格式。

看看SimpleDateFormat的格式。

你的格式字符串應該是:

yyyy-MM-dd HH:mm:ss 
+1

爲了明確......日期時間格式化程序中的大寫字母/小寫字母對於java.text.SimpleDateFormat以及[Joda-Time](http://www.joda.org/joda-time/)都很重要。 'HH'爲24小時制,'hh'爲12小時制。 – 2014-01-19 23:45:46

1

其簡單的嘗試.......

Date datenow = Calendar.getInstance().getTime(); 
SpinnerDateModel smb = new SpinnerDateModel(datenow, null, null, Calendar.HOUR_OF_DAY); 
SPIN_DATE.setModel(smb); 
JSpinner.DateEditor d = new JSpinner.DateEditor(SPIN_DATE, "dd-MMM-yyyy"); 
SPIN_DATE.setEditor(d); 
+1

您的代碼示例格式不正確。 – 2014-01-19 23:41:46