2014-01-06 29 views
2

我使用JSpinner为HH选择时间:MM:SS格式。每当 我打开微调自动设置为当前系统时间的GUI, 我需要的是比方说如果我点击给予一定的参考价值微调器,当 我再次打开它的旧值应显示后保存。使用的JSpinner获得价值

下面的代码,但它不工作我都试过了,

if(Stime != null){ 
      Date time = new SimpleDateFormat("HHMMSS", Locale.ENGLISH).parse(Stime); 
      StarttimeSpinner.setValue(time); 
} 

其中表准时在HHMMSS格式e.g先前保存的时间(142030)

是正确的吗?或者我该怎么做?请帮忙!

编辑:

SpinnerModel Startmodel = new SpinnerDateModel(); 
    StarttimeSpinner = new JSpinner(); 
    StarttimeSpinner = new JSpinner(Startmodel); 
    JComponent editor = new JSpinner.DateEditor(StarttimeSpinner, "HH:mm:ss"); 
    StarttimeSpinner.setEditor(editor); 

    try{ 
     if(!(Stime.equalsIgnoreCase(""))) 
      { 
      Date time = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH).parse(Stime); 
      SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
      String dateString = formatter.format(time); 
      StarttimeSpinner.setModel(new SpinnerListModel(new String[]{dateString})); 

     } 
    } 
    }catch(Exception ie){ 
     System.err.println("in time panel"); 
    } 

表准时格式是HHMMSS及其一个string.In dateString(可变)1得到HH的先前值:mm:ss的格式,但它不被在微调设置而不是显示系统时间。

编辑2: 我已经发现了一个解决方案,但有袋式,

如果我的代码是这样的(1),

StarttimeSpinner = new JSpinner(); 
      SpinnerModel Startmodel = new SpinnerDateModel(); 
      StarttimeSpinner = new JSpinner(Startmodel); 
      JComponent editor = new JSpinner.DateEditor(StarttimeSpinner, "HH:mm:ss"); 
      StarttimeSpinner.setEditor(editor); 

的下面一段代码工作正常,

Date starttime = new Date(); 
starttime = (Date)StarttimeSpinner.getValue(); 

如果我改变像下面的代码(2),

Date time = new SimpleDateFormat("HHmmss", Locale.ENGLISH).parse(Stime); 
     SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
     String dateString = formatter.format(time); 
     StarttimeSpinner.setModel(new SpinnerListModel(new String[]{dateString})); 

其中表准时为(例如)120011

下面的一段代码不做工精细,

Date starttime = new Date(); 
starttime = (Date)StarttimeSpinner.getValue(); 

,并在获取价值声明抛出异常的java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date

+0

1)为了更好地帮助越早,张贴[SSCCE(HTTP:// SSCCE。组织/)。 2)请学习常见的[Java命名约定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具体用于名称的情况) ,方法和属性名称并一致使用它们。 –

+0

当你说保存,你的意思是你关闭整个程序,当你再次打开它,你想要显示的时间?如果是这样的话,你需要将它保存到一个文本文件或类似的东西。并在打开程序时加载文件 –

+0

那么,出现什么问题了吗? – MadProgrammer

回答

2

我不完全100%肯定你想acheive,但看看下面的例子,也许它会帮助你的。我使用一个按钮来设置日期,然后另一个按钮弹出一个JOptionPane,显示从第一次按钮点击保存的前一个日期。

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import javax.swing.*; 

public class TimeSpinner { 

    Date date; 
    JButton setDate = new JButton("Set Date"); 
    JButton showSpinner = new JButton("Show Spinner"); 
    JTextField jtfDate = new JTextField(15); 
    JSpinner spinner = new JSpinner(); 
    JPanel panel; 

    public TimeSpinner() { 
     jtfDate.setEditable(false); 

     panel = new JPanel(new BorderLayout()); 
     panel.add(setDate, BorderLayout.CENTER); 
     panel.add(jtfDate, BorderLayout.NORTH); 
     panel.add(showSpinner, BorderLayout.SOUTH); 

     setDate.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) { 
       date = new Date(); 
       jtfDate.setText(date.toString()); 
      } 
     }); 
     showSpinner.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) { 
       if (date != null) { 
       SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 
       String dateString = formatter.format(date); 
       spinner.setModel(new SpinnerListModel(new String[]{dateString})); 
       JOptionPane.showConfirmDialog(null, spinner, "Spinner:" 
         ,JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 
       } 
      } 
     }); 

     JFrame frame = new JFrame("Date Spinner Demo"); 
     frame.add(panel); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

    } 


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

enter image description here

用下面的代码,我能做到这一点使用一对SpinnerModel

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 
String dateString = formatter.format(date); 
spinner.setModel(new SpinnerListModel(new String[]{dateString})); 

编辑

对于不同的格式,只是更改格式。如果您在时间

  • 想要小时24小时模式"HH:mm:ss"
  • 12小时模式"hh:mm:ss a"
+0

关于你的上面的代码,当我点击设置日期在GUI我得到星期一06年1月11日11:12:43 IST和在微调它显示01/06/14。我更改了SimpleDateFormat formatter = new SimpleDateFormat(“MM/dd/yyyy”);到SimpleDateFormat formatter = new SimpleDateFormat(“HHMMSS”);得到11:12:43或者像111243我是指单独的时间。但是它给出了一些不同的价值。有可能得到? – user3164187

+0

你只需要改变日期格式。这是我放在一起的一个快速程序。只需将格式相应地修改为所需的格式即可。我使用的格式是“MM/dd/yyyy”。我可以很容易地使它成为'“dd/MM/yyy”' –

+0

使用'“hh:mm:ss a”'。大写字母的意思是不同的 –