用JAVASCRIPT,简单但是不太好看的办法是,在你的TEXTFIELD失去焦点时,判断它的VALUE是不是包含数字,是的话就仍让焦点返回到TEXTFIELD上.
好看点的就是用KEYDOWN事件控制了:)比较烦:)

解决方案 »

  1.   

    我写过一个JavaBean,继承javax.swing.JTextField,完成这样的功能,但是实现机理比较复杂。首先,Swing文本控件是使用document来控制编辑操作的。你需要继承一个javax.swing.text.PlainDocument类的子类,override他的insertString方法,在其中进行判断,只有当传入参数是数字时,才调用父类的insertString方法,否则什么也不做。然后,在你自己继承javax.swing.JTextField类的子类里,
    setDocument(new yourDocument());
      

  2.   

    其实用这个就可以了javascript 的函数isNaN()判断textField的值
    if (isNaN(k1.value)==true)
          { 
          window.alert("對不起﹗你輸入的不是數字﹗")
          k1.value=0
          }
          else
          ......end if
      

  3.   

    有好方法但太复杂了。
    原理就是lgpen(永远是新手!)讲的!
      

  4.   

    TO :
      能不能在每一个KeyEvent事件中得到输入的键值(Char),然后通过与数字的Char值进行判断呢,如果不是,那么就象JavaScript那样来处理。这样也能行的通吧,不过也显得比较笨了点! :)
      

  5.   

    用document,很容易实现的,手头没有资料,没办法给你写一个,你可以查一下。
      

  6.   

    chinajavaworld的sunking写的import javax.swing.*;
    import javax.swing.text.*;
    import java.awt.*;/**
     * 只允许输入数字的JTextField
     *               JNumberField txtNumber1=new JNumberField()
     *                        txtNumber2=new JNumberField(4)
     *                        txtNumber3=new JNumberField(4,12)
     */
    public class JNumberField extends JTextField
    {
        public JNumberField()
        {
            super();
            setDocument(new numDoc());
        }
        public JNumberField(int decLen)
        {
            super();
            setDocument(new numDoc(decLen));
        }
        public JNumberField(int decLen,int maxLen)
        {
            super();
            setDocument(new numDoc(decLen,maxLen));
        }
    }
    class numDoc extends PlainDocument
    {
    int maxLength=16;
    int decLength=0;
    public numDoc(int decLen,int maxLen)
    {
    maxLength=maxLen;
    decLength=decLen;
    }
    public numDoc(int decLen)
    {
    decLength=decLen;
    }
    public numDoc(){}
    public void insertString(int offset,String s,AttributeSet a)throws BadLocationException
    {
    int len=getLength();
    String str=getText(0,len);
    int decPos=str.indexOf(".");
    if (
    s.equals("F")||s.equals("f")||s.equals("D")||s.equals("d")
    ||(str+s).length()>maxLength
    ||(decPos>-1&&offset>decPos&&((str.substring(decPos+1))+s).length()>decLength)
    ||(str.trim().equals("0")&&!s.substring(0,1).equals(".")&&offset!=0)
    ||(s.equals(".")&&decLength==0)
    ||(s.indexOf(".")>-1&&s.substring(s.indexOf(".")+1).length()>decLength)
    )
    {
        Toolkit.getDefaultToolkit().beep();
        return;
    }
    try{
        Float.parseFloat(str+s);
    }catch(Exception e){
        Toolkit.getDefaultToolkit().beep();
        return;
    }
    super.insertString(offset,s,a);
    }
    }
      

  7.   

    function number(){
    if (event.keyCode<48 || event.keyCode>57 || event.keyCode==118) 
    event.returnValue=false;
    if (event.keyCode==46) 
    event.returnValue=true;
      }<input type="text" name="test" value="" onclick="number()">
      

  8.   

    有必要搞得那么复杂吗?
    给你一个,改自一篇sun公司开发文档……import javax.swing.text.*;
    import java.awt.*;
    /**
     * 描述:调用格式为jTextField.setDocument(new NumberDocument())即可
     * */
    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.out.println("你输入了非数字字符!!")
          }
        }
      

  9.   

    不好意思,后面少复制了一点代码,接上
        super.insertString(offs, new String(result, 0, j), a);
      }
    }
      

  10.   

    自己写一个TxtValidate类(继承KeyListener接口),然后用AddKeyListener()把它加到要控制的TextField里去,我在好多Java书上看到的都是这种做法。我也写了一个,很简单,可惜今天没有带代码。
      

  11.   

    都不看demo的!jdk 自带的demo里有很好的integerdocument!
      

  12.   

    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import java.awt.Component;
    import javax.swing.text.JTextComponent;public class FloatNumberKeyListener implements KeyListener{
    public FloatNumberKeyListener(){
    }

    public void keyPressed(KeyEvent e){
    }

    public void keyReleased(KeyEvent e){
    }

    public void keyTyped(KeyEvent e){
    Component c = (Component)e.getSource();

    if (c instanceof JTextComponent){
    JTextComponent tc = (JTextComponent)c;
    String strText = null;

    try{
    strText = tc.getText();
    }
    catch (NullPointerException ne){
    strText = null;
    }

    if (strText==null){
    char code = e.getKeyChar();
    if (code!='0'&&isNumber(code)){
    return;
    }
    else
    e.consume();
    }
    else{
    char code = e.getKeyChar();
    if (code=='.'&&(strText.indexOf(".")==-1))
    return;
    else if (isNumber(code))
    return;
    else if (e.isActionKey())
    return;
    else
    e.consume();
    }
    }
    }

    protected boolean isNumber(char code){
    if ((code=='0')||(code=='1')||(code=='2')||(code=='3')||(code=='4')||(code=='5')||
    (code=='6')||(code=='7')||(code=='8')||(code=='9'))
    return true;

    return false;
    }

    }
    为你的textfield添加以上KeyListener
      

  13.   

    import javax.swing.text.PlainDocument;
    import javax.swing.text.AttributeSet;
    import java.awt.Toolkit;
    import javax.swing.text.BadLocationException;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.out.println("你输入了非数字字符!!")
           }
         }
         super.insertString(offs, new String(result, 0, j), a);
           }
          }在控件中
    调用格式为jTextField.setDocument(new NumberDocument())即可