首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java文本框的一些有关问题

2013-01-28 
java文本框的一些问题我要实现用户在输入银行卡账号的时候,每输完4个数字继续输的时候,系统会自动用一个空

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);

热点排行