【问题标题】:Using JSpinner to get values使用 JSpinner 获取值
【发布时间】:2014-01-06 04:43:44
【问题描述】:

我正在使用JSpinner 选择 HH:MM:SS 格式的时间。每当 我打开 GUI,微调器自动设置为当前系统时间, 我需要说的是,例如,如果我在给微调器一些值之后单击保存,以及何时 我再次打开它应该显示旧值。

我尝试了以下代码,但它不起作用,

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

时间格式是 HHmmss,它是一个字符串。在 dateString(Variable) 中,我得到了 HH:mm:ss 格式的前一个值,但它没有在 Spinner 中设置,而是显示系统时间。

编辑 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();

并在 get value 语句中将异常作为 java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date 抛出。

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2)请学习常用的Java naming conventions(特别是用于名称的大小写)类,方法和属性名称并一致地使用它们。
  • 当你说保存时,你的意思是你关闭了整个程序,当你再次打开它时,你想显示那个时间吗?如果是这种情况,您需要将其保存到文本文件或类似文件中。并在打开程序时加载文件
  • 那么,有什么问题吗?
  • @peeskillet 不,我并没有关闭整个程序,只是关闭了 spinner 的 GUI。我在 Stime 变量中有以前的值,但我不知道如何设置它。
  • @MadProgrammer 我没有看到系统时间再次设置的任何变化

标签: java swing date simpledateformat jspinner


【解决方案1】:

我不能 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();
            }
        });
    }
}

通过以下代码,我能够使用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"

【讨论】:

  • 关于您的上述代码,当我在 GUI 中单击设置日期时,我得到 Mon Jan 06 11:12:43 IST 2014 并在微调器中显示 01/06/14。我改变了 SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");到 SimpleDateFormat 格式化程序 = new SimpleDateFormat("HHMMSS");要获得 11:12:43 或类似 111243,我的意思是独处时间。但它给出了一些不同的值。有可能得到吗?
  • 您只需要更改日期格式。这是我整理的一个快速程序。只需根据所需格式修复格式即可。我使用的格式是"MM/dd/yyyy"。我可以很容易做到"dd/MM/yyy"
  • 使用"hh:mm:ss a"。大写字母的含义不同
  • 您的代码运行良好。我不知道我的编辑代码有什么问题。我是否正确初始化和设置 Jspinner 的值?
  • StarttimeSpinner.setModel(new SpinnerListModel(new String[]{dateString}));这行代码没有将值设置为 spinner
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 2021-04-19
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多