java – 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”);编码以初始化文本字段.
标签:java,format,swing,document,jformattedtextfield 来源: https://codeday.me/bug/20190703/1366726.html