import javax.swing.text.*;
import javax.swing.*;
import java.awt.*;
import java.text.*;public class DigitalTextField extends JTextField
{
  private Toolkit toolkit;
  public DigitalTextField()
  {
    toolkit = Toolkit.getDefaultToolkit();
  }  protected Document createDefaultModel() {
    return new DigitalDocument();
  }  protected class DigitalDocument extends PlainDocument {    public void insertString(int offs, String str, AttributeSet a)
      throws BadLocationException {      char[] source = str.toCharArray();
      char[] result = new char[source.length];
      int j = 0;        for (int i = 0; i < result.length; i++)
        {
          if (Character.isDigit(source[i]))
              result[j++] = source[i];
          else
            toolkit.beep();
        }
        super.insertString(offs, new String(result, 0, j), a);
    }
  }}象JTextField一样使用就可以了!
TBW:你的帐号怎么和我的名字完全相同,你也叫那个名字?
    这么有缘,交个朋友吧^_*

解决方案 »

  1.   

    if(Character.isDigit(e.getKeyChar()))//判断输入的是数字
    if(Character.isLetter(e.getKeyChar()))//判断输入的是字母
      

  2.   

    bhr(追风):你好,很高兴,谢谢你参与,是的,taohongjun是我名字的拼音,‘安意’是笔名,你呢?
      

  3.   

    也可以不用扩展JTextField,直接使用它的setDocument方法设定document即可,也就是只需扩展类似楼上所贴的PlainDocument即可。如下所讲
    调用textfiled.setDocument(new NumberDocument());
    其中NumberDocument是继承PlainDocument的子类。
    覆盖其insertString和remove两个方法。
    详情文档请参考:
    http://java.sun.com/docs/books/tutorial/uiswing/components/textfield.html#validation
    设置只能输入数字
    import javax.swing.text.*;
    import java.awt.*;
    public class NumberDocument extends PlainDocument {
      public void insertString(int offs, String str, AttributeSet a)
      throws BadLocationException {
        char[] source = str.toCharArray();
        char[] result = new char[source.length];
        int j = 0;
        for (int i = 0; i < result.length; i++) {
          if (Character.isDigit(source[i]))
            result[j++] = source[i];
          else {
            Toolkit.getDefaultToolkit().beep();
            System.err.println("insertString: " + source[i]);
          }
        }
        super.insertString(offs, new String(result, 0, j), a);
      }
    }
      

  4.   

    我使用上面的这个Document方法,但是在如下语句的时候,却出现了异常,结果虽然队,但是程序没法继续运行,也没法处理这个异常,怎么办?多谢各位!
    iYear=(new Integer(t_Year.getText().toString()).intValue());
    就是将文本框的字符串变成整数,这个t_Year使用了那个Document.出现下面的异常:
    Exception occurred during event dispatching:java.lang.NumberFormatException:  at java.lang.Integer.parseInt(Integer.java:435) at java.lang.Integer.<init>(Integer.java:549) at test1.DatePanel.day_GetLimit(DatePanel.java:436) at test1.DatePanel.day_MaxSet(DatePanel.java:455) at test1.DatePanel.sbar_Year_adjustmentValueChanged(DatePanel.java:358) at test1.DatePanel$10.adjustmentValueChanged(DatePanel.java:128) at javax.swing.JScrollBar.fireAdjustmentValueChanged(JScrollBar.java:623) at javax.swing.JScrollBar$ModelListener.stateChanged(JScrollBar.java:640) at javax.swing.DefaultBoundedRangeModel.fireStateChanged(DefaultBoundedRangeModel.java:329) at javax.swing.DefaultBoundedRangeModel.setRangeProperties(DefaultBoundedRangeModel.java:285) at javax.swing.DefaultBoundedRangeModel.setValue(DefaultBoundedRangeModel.java:150) at javax.swing.JScrollBar.setValue(JScrollBar.java:419) at test1.DatePanel.year_Check(DatePanel.java:314) at test1.DatePanel.t_Year_keyReleased(DatePanel.java:338) at test1.DatePanel$2.keyReleased(DatePanel.java:62) at java.awt.Component.processKeyEvent(Component.java:3680) at javax.swing.JComponent.processKeyEvent(JComponent.java:2014) at java.awt.Component.processEvent(Component.java:3553) at java.awt.Container.processEvent(Container.java:1164) at java.awt.Component.dispatchEventImpl(Component.java:2593) at java.awt.Container.dispatchEventImpl(Container.java:1213) at java.awt.Component.dispatchEvent(Component.java:2497) at java.awt.LightweightDispatcher.processKeyEvent(Container.java:2155) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2135) at java.awt.Container.dispatchEventImpl(Container.java:1200) at java.awt.Component.dispatchEvent(Component.java:2497) at java.awt.EventQueue.dispatchEvent(EventQueue.java:339) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:131) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)