读书人

java文本框的一些有关问题

发布时间: 2013-01-28 11:49:56 作者: rapoo

java文本框的一些问题
我要实现用户在输入银行卡账号的时候,每输完4个数字继续输的时候,系统会自动用一个空格键隔开来,即每4个数字用一个空格键隔开。就像平时我们在ATM机上输账号一样,每次系统都会用一个空格键4个数字的隔开。求高手大侠指教,谢谢!
jt2.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e){

String s1=new String(jt2.getText());
if(s1.length()>0&&(s1.length()!= 6||!(s1.matches("\\d+")))){
JOptionPane.showMessageDialog(null, "账号由21个数字组成!");
jt2.setText(null);
jt2.requestFocus();
}
}
});
麻烦各位高手最好在我这个代码框里面进行操作,感激! java
[解决办法]

package com.tur.demo;

import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class TextFieldDocumentDemo {
private static void createAndShowGui() {
final JTextField textField = new JTextField(20);
textField.setDocument(new FormatedDocument());

JFrame frame = new JFrame("Text Field Document Demo");
frame.getContentPane().add(textField);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
createAndShowGui();
}
}

class FormatedDocument extends PlainDocument {
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
// 如果输入非数字,则输入无效
if (!str.matches("\\d+")) {
return;
}

// 取得输入的所有字符,输入有可能是插入,而不是每次都是输入在最后一个字符
int length = getLength();
StringBuilder sb = new StringBuilder(getText(0, length));
sb.insert(offs, str);

// 去掉字符中的所有空格
char[] chs = sb.toString().replaceAll("\\s+", "").toCharArray();

// 格式化新输入的字符串


sb.replace(0, sb.length(), "");
for (int i = 1; i <= chs.length; ++i) {
sb.append(chs[i - 1]);

if (i % 4 == 0) {
sb.append(" ");
}
}

// 删除原来的字符串,并显示新输入和格式化后的字符串
remove(0, getLength());
super.insertString(0, sb.toString().trim(), a);
}
}


[解决办法]
使用JFormattedTextField:

MaskFormatter editFormatter = new MaskFormatter("#### #### #### ###");
MaskFormatter displayFormatter = new MaskFormatter("#### #### #### ###");
DefaultFormatterFactory factory = new DefaultFormatterFactory( displayFormatter, displayFormatter, editFormatter);
JFormattedTextField tf = new JFormattedTextField(factory);

读书人网 >Java相关

热点推荐