2014-01-06 5 views
2

Я использую JSpinner для выбора времени в формате ЧЧ: ММ: СС. Когда я открываю графический интерфейс, счетчик автоматически настраивается на текущее системное время, Что мне нужно, например, если я нажму «Сохранить», добавив некоторое значение для счетчика, а когда снова открою его, то должны быть показаны старые значения.Использование JSpinner для получения значений

Я попытался следующий код, но его не работает,

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

где STIME является ранее сэкономленное время в формате HHMMSS например (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"); 
    } 

формат STIME является ЧЧММСС и сво string.In DateString (переменной) я получить предыдущее значение в HH: сс, но его не устанавливается в Spinner вместо того, чтобы показывать систему: мм время.

EDIT 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})); 

где STIME есть (например) 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%, но посмотрите пример ниже, возможно, это поможет вам. Я использую кнопку, чтобы установить дату, затем другую кнопку, которая выдает 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})); 

EDIT

для различного форматирования, просто измените формат.Если вы хотите во время

  • В течение нескольких часов в 24 часовом режиме "HH:mm:ss"
  • Для 12-часового режима "hh:mm:ss a"
+0

в отношении вашего вышеуказанного кода, когда я нажимаю на дату установки в графическом интерфейсе, я получаю Mon Jan 06 11:12:43 IST 2014 и в spinner это показывает 01/06/14. Я изменил SimpleDateFormat formatter = новый SimpleDateFormat («MM/dd/yyyy»); to SimpleDateFormat formatter = новый SimpleDateFormat («HHMMSS»); получить 11:12:43 или, как 111243, я имею в виду только время. но он дает некоторые разные значения. можно ли это получить? – user3164187

+0

Вам просто нужно изменить формат даты. Это была быстрая программа, которую я собрал. Просто исправьте форматирование в соответствии с желаемым форматом. Формат, который я использовал, был «MM/dd/yyyy». Я мог бы легко сделать это '' dd/MM/yyy "' –

+0

Использовать '' hh: mm: ss a "'. Заглавные буквы означают что-то другое –

Смежные вопросы