我使用掩码接受代码为CUIL(阿根廷),其格式如下:## - ######## - #。但是,中间数字有7个数字而不是8个,这是一个可能性,所以我想做的是当用户按下" - "或者右箭头在中间数字的开头自动完成0。
示例:
用户类型 20-1523245
然后用户按 - 结果是 20-01523245 -
重要的是光标保持在最后一个位置以写入最后一个数字。 20-01523245-2
我已经尝试使用KeyListener执行此操作,但我遇到了问题,因为当我将值设置为0时,掩码会消失,而且我也不知道这是否是最好的方法
我给你留下了代码,谢谢
public class JQFormattedTextField extends JFormattedTextField implements KeyListener {
private static final long serialVersionUID = 1L;
private JQFormats format;
private Map<JQFormats,String> formatMap;
public JQFormattedTextField(){
super();
addKeyListener(this);
createMap();
}
public JQFormattedTextField(JQFormats format){
this();
setFormat(format);
}
public void setFormat(JQFormats format){
this.format=format;
try {
MaskFormatter mask = new MaskFormatter(formatMap.get(format));
mask.install(this);
} catch (ParseException ex) {
System.out.println("Error creating the mask with the passed format");
}
}
public JQFormats getFormat(){
return format;
}
public void createMap(){
formatMap = new HashMap<JQFormats,String>();
formatMap.put(JQFormats.CUIL, "##-########-#");
formatMap.put(JQFormats.CUIT, "##-########-#");
formatMap.put(JQFormats.DNI, "##.###.###");
formatMap.put(JQFormats.FECHA,"##/##/####");
formatMap.put(JQFormats.IMPORTE_2DECIMALES, "####.##");
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getKeyCode() == KeyEvent.VK_MINUS || arg0.getKeyCode() == 39){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
StringBuilder s = new StringBuilder(getText());
s.setCharAt(3,'0');
setValue(s.toString());
setFormat(format);
}
});
}
}
答案 0 :(得分:0)
我找到了解决方案,也许有人对此感兴趣。它对每个maskFormatter来说都有点特殊,但它确实有效。我将发布我如何处理日期格式,因为其他格式对阿根廷来说太具体了
Date 1 Date 2 Date 3
Part A 122 134 1212
Part B 453 3 4536
Part C 35 23 3
这里我创建了一个由数字选中的掩码,现在是keyListener
Part A Part B Part C
Info 1 - - -
Date1 Info 2 122 453
Info 3 - - -
Info 1 - - -
Date 2 Info 2 134 3
Info 3 - - -
Info 1 - - -
Date 3 Info 2 1212 4536
Info 3
我使用split函数将字符串分成几部分,只取数字。然后我使用String.format将数字格式化为我想要的数字(2和2),然后再次连接部分。 请记住jqftf有一个掩码,所以我不能在插入的字符串中添加'/'或' - '字符
多数,我希望它可以帮到你
问候!