繁体   English   中英

结合JSpinner和JFormattedTextField

[英]combine JSpinner with JFormattedTextField

我想制作一个自定义的JSpinner来编辑白天的时间。 我希望格式为1HH:mm:ss a1,我已经知道了。

我还想添加JFormattedTextField一些功能:

  1. setplaceHolderCharacter('_')

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

    __:23:45在屏幕上显示。

  2. 输入限制

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

    并尝试输入任何内容,他只能输入数字,不允许输入字母。

任何帮助,将不胜感激!

使用JFormattedTextField可能会有更好的解决方案,但这是内置Java类的解决方案。 同样,这不符合您用“ _”替换已删除数字的要求。 但是您可以选择秒数,然后旋转秒数而不是小时数。 而且几乎只有输入限制。 您可以写字母,但是不会触发ChangeEvent。 额外的好处:您不必考虑60分钟后什么时候可以更改到下一小时之类的东西,并且它当然可以与Date拥有的所有内容一起工作(因此也可以旋转数月或数年)

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM