JFormattedTextField特定格式

用户名

我需要遵循一些要求,按照格式“ 00:00”制作一个JFormattedTextField:

  • 唯一可更改的应该是“ 00”之一。(因此“:”不应删除)
  • 制表符使您可以在“:”的两侧之间切换。(因此,将光标放在一侧,而将制表符标记在另一侧都标记为“ 00”)
  • 将“ 00”更改为“ 2”应将其格式化为“ 02”。
  • 它的字符数限制应为5,包括“:”。(4个可变字符)
  • 应将其初始化为“ 00:00”,但不应接受。
  • 除数字外,您不应输入其他任何内容。(字母,符号,负数等)

有没有办法做到这一点?我看过要添加到JFormattedTextField的不同格式化程序,验证器和文档过滤器,但是我不确定该使用哪一个。(现在使用DefaultFormatter,但已经查看了NumberFormatter的限制。我是否需要结合使用格式化程序和验证程序?)

这是我现在的JFormattedTextField:http://pastebin.com/jW2RSJXe[1]。

从执行此操作的代码到外观的示例/指针,将不胜感激!

保罗·萨姆索塔

运行此示例。它使用MaskFormatter:是永久存在的,但我不知道如何将您的问题的另一部分:如果你只有2个,它会显示02你可以玩它格式化

import java.awt.BorderLayout;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.text.MaskFormatter;

public class MaskFormatterTest extends JPanel {

    private JFormattedTextField formatText;

    public MaskFormatterTest() {
        formatText = new JFormattedTextField(createFormatter("##:##"));
        formatText.setColumns(20);
        formatText.setText("00:00");

        setLayout(new BorderLayout());
        add(new JLabel("Enter only numbers"), BorderLayout.NORTH);
        add(formatText, BorderLayout.CENTER);
    }

    private MaskFormatter createFormatter(String s) {
        MaskFormatter formatter = null;
        try {
            formatter = new MaskFormatter(s);
        } catch (java.text.ParseException exc) {
            System.err.println("formatter is bad: " + exc.getMessage());
            System.exit(-1);
        }
        return formatter;
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("MaskFormatter example");
                frame.add(new MaskFormatterTest());
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocationByPlatform(true);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

MaskFormatter设置为在每个位置的每个字符,并使其大小的类型的值。在这种情况下,我使用##:##允许两位数,一个冒号和另外两位数。

更新:添加formatText.setText("00:00");到代码中以初始化文本字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章