【问题标题】:Getting the TIME value from JSpinner从 JSpinner 获取 TIME 值
【发布时间】:2017-04-04 23:28:17
【问题描述】:

我对 java 编程很陌生,我创建了一个 java 程序,使用户能够使用 JFrame 上的 JSpinner 输入时间(HH:mm:ss 格式)。它是通过自定义 JSPinner 的代码来实现的(如下所示)。我要做的是获取用户输入的值(时间)并将其转换为显示在 JLabel 上的字符串。我尝试过使用状态更改事件,但仅适用于整数模型。

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

【问题讨论】:

  • JSpinner#getValue 将返回一个 Date 值,表示微调器的“时间” - 基本概念在 How to use spinners 中演示
  • 对于example
  • 如何将接收到的值传递给 JLabel 或其他地方?我尝试在控制台上打印出来进行测试,但没有返回任何内容。我使用了您的示例对象 value = time_spinner.getValue().toString();和 if 语句,但删除了格式 HH:mm,并尝试使用 System.out.print(value) @MadProgrammer 将其打印出来
  • 观察代码,我的似乎没有将值读取为日期的实例。而是执行了 else 条件。
  • 由于我只有一个脱离上下文的sn-p代码,我无法进一步评论

标签: java swing netbeans jspinner


【解决方案1】:

在您的问题的上下文中,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);
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多