2017-04-04 150 views
0

我对Java编程颇为陌生,并且创建了一个Java程序,使用户可以在JFrame上使用JSpinner输入时间(HH:mm:ss格式)。它是通过自定义JSPinner的代码(如下所示)完成的。我想要做的是获取用户输入的值(Time)并将其转换为显示在JLabel上的字符串。我尝试过使用状态改变事件,但只适用于整数模型。从JSpinner获取TIME值

的JSpinner定制的代码

Date date = new Date(); 
SpinnerDateModel sm = new SpinnerDateModel(date, null, null, Calendar.HOUR_OF_DAY); 

time_spinner = new javax.swing.JSpinner(sm); 

JSpinner.DateEditor te = new JSpinner.DateEditor(time_spinner, "HH:mm:ss"); 
time_spinner.setEditor(te); 

getContentPane().add(time_spinner, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 50, 120, 30)); 
+1

'的JSpinner#的getValue '会返回代表微调器“时间”的'Date'值 - 基本概念在[如何使用微调器](https://docs.oracle.com/javase/tutorial/uiswing/components/spinner。 html) – MadProgrammer

+0

For [example](http://stackoverflow.com/questions/23103328/how-change-formate-time-from-jspinner-solved/23103458#23103458) – MadProgrammer

+0

如何将收到的值传递给JLabe我在哪里?我试图在控制台上打印出来进行测试,但没有任何回复。我用你的例子对象value = time_spinner.getValue()。toString();和if语句,但删除了格式HH:mm,并尝试使用System.out.print(值)将其打印出来@MadProgrammer –

回答

3

在你的问题的情况下,JSpinner#getValue将返回Date对象。你需要采取Date对象,并对其进行格式化不断需要你(例如HH:mm:ss

这表明在How to use Spinners什么方式,这将是值得你花时间阅读

import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JSpinner; 
import javax.swing.SpinnerDateModel; 
import javax.swing.SwingUtilities; 

public class Test1 { 

    public static void main(String[] args) { 
     new Test1(); 
    } 

    public Test1() { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JSpinner time_spinner; 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      Date date = new Date(); 
      SpinnerDateModel sm = new SpinnerDateModel(date, null, null, Calendar.HOUR_OF_DAY); 

      time_spinner = new javax.swing.JSpinner(sm); 

      JSpinner.DateEditor te = new JSpinner.DateEditor(time_spinner, "HH:mm:ss"); 
      time_spinner.setEditor(te); 

      add(time_spinner, gbc); 

      JButton btn = new JButton("Show me the time"); 
      btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        Object value = time_spinner.getValue(); 
        if (value instanceof Date) { 
         Date date = (Date)value; 
         SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); 
         String time = format.format(date); 

         JOptionPane.showMessageDialog(TestPane.this, "The time is " + time); 
        } 
       } 
      }); 
      add(btn, gbc); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 
    } 

}