Java 将JSpinner与JFormattedTextField组合

Java 将JSpinner与JFormattedTextField组合,java,swing,jspinner,jformattedtextfield,Java,Swing,Jspinner,Jformattedtextfield,我想制作一个定制的JSpinner,用于编辑工作时间。我想要的格式是1HH:mm:SSA1,我已经得到了这个部分 我还想添加一些JFormattedTextField的功能: 设置占位符字符(“”) 例如,时间是09:23:45,当用户删除09时, __:23:45显示在屏幕上 输入限制 例如,时间是09:23:45,当用户删除09时, 并且尝试输入任何东西,他只能输入数字,不允许输入字母 任何帮助都将不胜感激 使用JFormattedTextField可能有更好的解决方案,但这里有一个内置ja

我想制作一个定制的
JSpinner
,用于编辑工作时间。我想要的格式是1HH:mm:SSA1,我已经得到了这个部分

我还想添加一些
JFormattedTextField
的功能:

  • 设置占位符字符(“”)


    例如,时间是09:23:45,当用户删除09时,

    __:23:45显示在屏幕上

  • 输入限制

    例如,时间是09:23:45,当用户删除09时,

    并且尝试输入任何东西,他只能输入数字,不允许输入字母


  • 任何帮助都将不胜感激

    使用JFormattedTextField可能有更好的解决方案,但这里有一个内置java类的解决方案。此外,这也不符合您的要求,将删除的数字替换为“\u1”。但您可以选择秒,然后旋转秒而不是小时。此外,几乎只有一个输入限制。您可以写信,但不会触发ChangeEvent。额外的好处:你不必考虑在60分钟后什么时候换到下一个小时,当然,这对约会的一切都是有效的(因此,旋转月份或年份也是可能的)


    谢谢,但我希望用户不能输入任何字母,只能输入数字。您能否进一步介绍如何将JFormattedTextfield与之链接?日期编辑器只有部分功能
    public class HourSpinner implements ChangeListener {
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new HourSpinner();
            }
        });
    }
    
    public HourSpinner() {
    
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(100, 70);
        frame.setLocationRelativeTo(null);
    
        Container contentPane = frame.getContentPane();
    
        JSpinner dateSpinner = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY));
        DateEditor editor = new JSpinner.DateEditor(dateSpinner, "HH:mm:ss");
        dateSpinner.setEditor(editor);
        dateSpinner.addChangeListener(this);
    
        contentPane.add(dateSpinner);
    
        frame.setVisible(true);
    
    }
    
    @Override
    public void stateChanged(ChangeEvent e) {
        JSpinner source = (JSpinner) e.getSource();
        System.out.println(source.getValue());
    }
    
    }