一。 只能输入数字
二。 控制输入的长度

解决方案 »

  1.   

    只能输入数字文本框本身实现不了.但是可以利用JAVASRIPT或JAVA来实现.实际就是对输入的内容进行检查.如果输入的内容不是数字,则清空.
    <input type = "text"  size = "20" maxlength = "20">
    其中maxlength属性 是控制输入的最大长度.
      

  2.   

    自定义个类:import javax.swing.text.AbstractDocument;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.PlainDocument;public class LimitedDocument extends PlainDocument {    private int _maxLength  = -1;    private String _allowCharAsString = null;
        public LimitedDocument(){
            super();
        }    public LimitedDocument( int maxLength ){
            super();
            this._maxLength = maxLength;
        }    public void insertString( int offset, String str, AttributeSet attrSet)
        throws BadLocationException{        if(str == null) {
                return;
            }        if(_allowCharAsString != null && str.length() == 1) {
                if(_allowCharAsString.indexOf(str) == -1){
                    return;
                }
            }        char[] charVal = str.toCharArray();
            String strOldValue = getText(0, getLength());
            byte[] tmp = strOldValue.getBytes();        if(_maxLength != -1 && (tmp.length + charVal.length > _maxLength)){
                return;
            }        super.insertString(offset, str, attrSet);
        }    public void setAllowChar(String str) {
            _allowCharAsString = str;
        }
    }使用时: LimitedDocument ld = new LimitedDocument(8);//参数为能输入的最大长度
     ld.setAllowChar("0123456789");//只能输入的字符 jTextField.setDocument(ld);//运用到文本框中
      

  3.   

    import javax.swing.*;
    import javax.swing.text.*;JTextField jtf=new JTextField();
    jtf.setDocument(new NumberDocument(jtf));public class NumberDocument extends PlainDocument {
      JTextField jtf=null;
      public NumberDocument(JTextField jtf) {
        this.jtf=jtf;
      }
      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];
        }
        if(this.jtf.getText().length()>=20)//限制长度
          super.insertString(offs, new String(result, 0, j), a);
      }
    }
      

  4.   

    我觉得beyond_xiruo(乱谈情)的方法比较好,也是比较简单的。
      

  5.   

    <input type = "text"  size = "20" maxlength = "20">
    不就行了吗?
      

  6.   

    beyond_xiruo(乱谈情) 写得好不错,收藏,也许以后用得着
      

  7.   

    我觉得yuanmeng163(今天我有空)的方法好,MVC结构就是这样子的嘛,外观和模块没有改变,只要改变相应的控制就行了。
      

  8.   

    响应JTextField的 CarePositionChanged事件
      

  9.   

    我晕我倒。
     newman0708(nch)、 nodreamer(无梦) :
    两位,beyond_xiruo(乱谈情) 写得好???
    我们来讨论一下,我认为beyond_xiruo(乱谈情) 写得一点都不通用!理由如下:
    1。假设我们有两个TextField的,一个限制只能输入8个字符,另一个限制为10个字符,用我的只需再new一个实例,传入相应限制的长度值就可以了。
    2。同上,如果一个限制只能输入数字,另一个限制只能输入字母呢?我的同样只需要调用方法setAllowChar("....");把充许输入的值填入即可。
    以上两个假设用beyond_xiruo(乱谈情) 写得就不能实现了。PS:我是讨论一下技术问题,没别的意思。:)
      

  10.   

    ^_^,今天,不,应该是昨天俺做了这个问题,最好的办法就是加入KeyListeneryourJTextField.addKeyListener(new KeyAdapter(){
     //只要重新相应KeyTyped事件就可以了么(sorry,小弟忘了函数名,手头又没有书,用keyTyped代替吧),我觉得这和vc的机制有些相似,可以采用底层的事件解决一些类似的问题
      public void keyTyped(KeyEvent e)
      {
          char ch=getKeyCode();
          if(ch<'0' || ch>'9')
              e.consume();//该函数会中止该次键盘输入事件
             //e.setKeyCode('0');该函数会把非数字输入转换为键入'0'      //要限制长度,就要先得到该文本组件
          JTextField jtf=(JTextField)e.getSource();
          String text=jtf.getText();
          if(text.length()>=10)  //10就是你想要的长度限制了
               e.consume();
      }
    });
      

  11.   

    抱歉,抱歉,e.getKeyCode()应该是e.getKeyChar()。
    getKeyCode()只能在响应键盘press和release的时候使用,它返回的是虚拟键码,可以得到键盘上的几乎所有键信息,有几个除外,可以参看文档。getKeyChar()函数返回的是键的ascii码,和vc的OnChar(),OnKeyPress(),OnKeyRelease()差不多。
    小弟用的同事的机器,没有java编译器,很不方便。
      

  12.   

    package test;import java.awt.BorderLayout;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JFrame;
    import javax.swing.JTextField;/**
     *
     * @author KUSER
     */
    public class Main extends JFrame implements KeyListener {    /**
         * @param args the command line arguments
         */
        private JTextField jtfRull = new JTextField(4);    public Main() {
            super();
            this.setLayout(new BorderLayout());
            this.add(jtfRull);
            jtfRull.addKeyListener(this);
        }    public static void main(String[] args) {
            // TODO code application logic here
            Main frame = new Main();        frame.setVisible(true);
            frame.setSize(300, 200);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }    public void keyTyped(KeyEvent e) {
            char ch = (char) e.getKeyChar();        if (ch >= '0' && ch <= '9') {
                String text = jtfRull.getText();
                if (text.length() >= 4) {
                    e.consume();
                }
            } else {
                e.consume();
            }
        }    public void keyPressed(KeyEvent e) {
        }    public void keyReleased(KeyEvent e) {
        }
    }
    这是我用上面那位朋友方法写的代码,经测试成功,今天我用了一天的时间找解决这个问题的最后方法。
    发现上楼的方法最简单 ,清楚,特此写了测试的代码。