我正在使用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");
}
Stime格式为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}));
Stime是(例如)120011
下面的代码无法正常工作,
Date starttime = new Date();
starttime = (Date)StarttimeSpinner.getValue();
并在获取值语句中将异常作为
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
抛出。 最佳答案
我不确定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"
关于java - 使用JSpinner获取值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20943144/