只可以输入字母、数字的输入框 Document

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class NumberLetterDocument extends PlainDocument {

 private int length;

 private JTextField textField;

 public NumberLetterDocument(JTextField textField, int length) {
  this.length = length;
  this.textField = textField;
 }

 public void insertString(int offs, String str, AttributeSet a)
   throws BadLocationException {
  StringBuilder builder = new StringBuilder(str);
  StringBuilder builder1 = new StringBuilder(textField.getText());

  Pattern p;
  String NUM_ALPHA_PATTERN = "[0-9a-zA-Z]";
  Matcher m;

  // p = Pattern.compile(NUM_ALPHA_PATTERN);
  // m = p.matcher(str);
  //    
  // if (!m.matches() ) {
  // return;
  // }

  for (int i = builder.length() - 1; i >= 0; i--) {
   int cp = builder.codePointAt(i);

   if (!Character.isDigit(cp)
     && !(Character.isLowerCase(cp) || Character.isUpperCase(cp))
     && cp != '/n') {

    builder.deleteCharAt(i);
    if (Character.isSupplementaryCodePoint(cp)) {
     i--;
     builder.deleteCharAt(i);
    }
   }
  }

  if (offs <= builder1.length() - 1) {
   if (builder1.length() + builder.length() > length) {
    return;
   } else
    super.insertString(offs, builder.toString(), a);
  } else {

   if (builder1.length() + builder.length() <= length) {
    super.insertString(offs, builder.toString(), a);
   }
  }

 }

 public static void main(String[] args) {
  JFrame frame = new JFrame();
  JPanel pane = new JPanel();
  pane.setLayout(new BorderLayout());
  JTextField textField = new JTextField();

  textField.setDocument(new NumberLetterDocument(textField, 10));

  textField.setText("nihaoma!");

  pane.add(textField, BorderLayout.NORTH);
  frame.add(pane);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(new Dimension(400, 300));
  frame.setVisible(true);
 }

}

 

意图:对输入框的输入内容加以限制,只能输入字母和数字,并且初始化的时候能够输入默认值。

方案:设计Document,继承自PlainDocument ,重写insertString(int offs, String str, AttributeSet a)方法。

问题:(1)如果使用正则表达式,即使用已经注释了的代码,则在输入的时候可以限制约束,但是不能在初始化的时候输入默认值。

         (2)java代码点、Character类方法的含义。

         (3)寻找只能输入汉字的方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值