Java JFormattedTextField特定格式

Java JFormattedTextField特定格式,java,swing,format,document,jformattedtextfield,Java,Swing,Format,Document,Jformattedtextfield,我需要按照“00:00”格式创建一个JFormattedTextField,其中包含一些要求: 唯一可更改的选项应为“00”中的任意一个。(因此“:”不应删除) 选项卡使您可以在“:”的两侧之间进行更改。(因此,将光标放在一侧,并在另一侧使用制表符标记“00”) 将“00”更改为“2”应将其格式化为“02” 其字符限制应为5,包括“:”。(4个可变字符) 它应该初始化为“00:00”,但不应该是可接受的输入 除了数字,你不应该输入任何东西。(字母、符号、负数等) 有办法做到这一点吗?我已经查

我需要按照“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”)以编码初始化文本字段。

我认为第2部分不可能实现。你可以看一看哪一个有点作弊,并使用两个文本字段谢谢!这让我非常接近我要找的东西!你有什么好地方可以阅读有关MaskFormatter或Formatter的一般信息吗。