将JSpinner与JFormattedTextField结合起来

时间:2014-06-27 16:06:59

标签: java swing jspinner jformattedtextfield

我想制作一个自定义的JSpinner用于编辑工作日。我希望格式为1HH:mm:ss a1,我已经得到了这个部分。

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

  1. setplaceHolderCharacter('_')

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

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

  2. 输入限制

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

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

  3. 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用JFormattedTextField可能有更好的解决方案,但这里有一个内置java类的解决方案。此外,这不符合您的要求,用'_'替换已删除的数字。但您可以选择秒,然后旋转秒而不是小时。此外,几乎只有输入限制。您可以写信,但不会触发ChangeEvent。额外的奖励:您不必考虑何时在60分钟或更长时间后更改为下一个小时,当然,它可以使用日期可以拥有的所有内容(因此也可以旋转数月或数年)

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

}