首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSpinner获取值

使用JSpinner获取值
EN

Stack Overflow用户
提问于 2014-01-06 04:43:44
回答 1查看 2.4K关注 0票数 2

我使用JSpinner选择时间的HH:MM:SS格式。每当我打开GUI时,旋转器就会自动设置为当前的系统时间,例如,如果我在为spinner提供了一些值之后单击了保存,当我再次打开它时,应该显示旧的值。

我试过遵循代码,但它不起作用,

代码语言:javascript
复制
if(Stime != null){
            Date time = new SimpleDateFormat("HHMMSS", Locale.ENGLISH).parse(Stime);
            StarttimeSpinner.setValue(time);
}

其中Stime是以前以HHMMSS格式节省的时间,例如(142030)

是对的吗?或者我该怎么做?请帮帮我!

编辑:

代码语言:javascript
复制
    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格式是HHmmss,它是一个string.In dateString(变量),我得到以前的HH:mm:ss格式的值,但它不是在旋转器中设置,而是显示系统时间。

编辑2:我找到了一个解决方案,但是有了一个bug,

如果我的代码是这样的,

代码语言:javascript
复制
 StarttimeSpinner = new JSpinner();
             SpinnerModel Startmodel = new SpinnerDateModel();
            StarttimeSpinner = new JSpinner(Startmodel);
            JComponent editor = new JSpinner.DateEditor(StarttimeSpinner, "HH:mm:ss");
            StarttimeSpinner.setEditor(editor);

下面的代码很好用,

代码语言:javascript
复制
Date starttime = new Date();
starttime = (Date)StarttimeSpinner.getValue();

如果我将代码更改如下(2),

代码语言:javascript
复制
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

下面的代码不能正常工作,

代码语言:javascript
复制
Date starttime = new Date();
starttime = (Date)StarttimeSpinner.getValue();

并以java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date的形式在get值语句中抛出异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-06 05:35:18

我并不是百分之百确定你想要的是什么,但是看看下面的例子,也许它会帮你解决问题。我使用一个按钮来设置日期,然后另一个按钮弹出一个JOptionPane,该按钮显示从第一个按钮单击保存的前一个日期。

代码语言:javascript
复制
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();
            }
        });
    }
}

使用下面的代码,我能够使用a SpinnerModel实现这一点

代码语言:javascript
复制
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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20943144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档