我自己编了一个小窗口,窗口内用一个JTextField接收用户输入,现在我只想让用户输入数字,就是屏蔽其他键盘输入。请问有什么已有的函数可以使用吗?谢谢各位了。

解决方案 »

  1.   

    也可以迂回一点,在输入后 你往数字上转,如果不能转换成数字 那就出个异常然后再catch里 做相应的操作
      

  2.   


    import javax.swing.JTextField;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.Document;
    import javax.swing.text.PlainDocument;public class NumberField extends JTextField {
     
         public NumberField(int cols) {
             super(cols);
         }
     
         protected Document createDefaultModel() {
             return new NumberDocument();
         }
     
         static class NumberDocument extends PlainDocument {
     
             public void insertString(int offs, String str, AttributeSet a) 
                 throws BadLocationException {
     
                 if (str == null) {
                     return;
                 }
                 char[] upper = str.toCharArray();
                 char[] temp = new char[upper.length];
                 for (int i = 0; i < upper.length; i++) {
                    if(upper[i] >= '0' && upper[i] <= '9') {
                     temp[i] = upper[i];
                    }
                 }
                 super.insertString(offs, new String(temp).trim(), a);
             }
         }
     }借用官方的API文档中的一个小例子,简单改了一下!用NumberField 代替你的JTextField,就可以只输入数字了。
      

  3.   

    监听事件 会吧判断如果不是 1~9 就把当前Jtext值从新设置成原来状态(用一个temp保存以前的字符)
      

  4.   


    <input name="ps_person_id" size="26" maxlength="18" onKeyDown="if(event.keyCode==13)event.keyCode=9" onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false"><FONT color=#006699>*请输入18位数字</FONT>
      

  5.   

    勉强可以用import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;import javax.swing.JFrame;
    import javax.swing.JTextField;public class WindowTest extends JFrame {    private static final long serialVersionUID = -3536657964686715631L;    public WindowTest() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JTextField textField = new JTextField();        textField.addKeyListener(new KeyAdapter() {            @Override
                public void keyReleased(KeyEvent e) {
                    JTextField source = (JTextField) e.getSource();
                    String oldText = source.getText();
                    StringBuilder sbText = new StringBuilder(oldText);
                    for (int i = sbText.length() - 1; i > -1; i--) {
                        char c = sbText.charAt(i);
                        if (c < '0' || c > '9') {
                            // 删除无效字符
                            sbText.delete(i, i + 1);
                        }
                    }                String newText = sbText.toString();
                    if (!newText.equals(oldText)) {
                        source.setText(sbText.toString());
                    }
                }        });        getContentPane().add(textField);
            setBounds(400, 300, 200, 57);
        }    public static void main(String[] args) {
            new WindowTest().setVisible(true);
        }
    }
      

  6.   


    还是用numberfield方便
    用正则表达式有点麻烦
    要监听键盘输入,
    而且如果碰到复制进去的
    字符就有问题了
      

  7.   

    import java.awt.Dimension;
    /**
     * <p>Title: OpenSwing</p>
     * <p>Description: JIntTextField 只能输入整数的文本框</p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Company: </p>
     * @author SunKing</a>
     * @version 1.0
     */
    public class JIntTextField extends JTextField
    {
        class IntOnlyDocument extends PlainDocument
        {        public void insertString(int offs, String str, AttributeSet a)
                throws BadLocationException
            {
                if(str == null)
                    return;
                char number[] = str.toCharArray();
                for(int i = 0; i < number.length; i++)
                {
                    if(offs == 0)
                    {
                        if(number[i] < '0' || number[i] > '9')
                        {
                            if(offs == length - 1)
                                remove(offs + i, 1);
                            else
                                return;
                        } else
                        {
                            length++;
                        }
                        continue;
                    }
                    if(!haveDot)
                    {
                        if((number[i] < '0' || number[i] > '9') && number[i] != '.')
                        {
                            if(offs == length - 1)
                                remove(offs + i, 1);
                            else
                                return;
                            continue;
                        }
                        if(number[i] == '.')
                            haveDot = true;
                        length++;
                        continue;
                    }
                    if(number[i] < '0' || number[i] > '9')
                    {
                        if(offs == length - 1)
                        {
                            remove(offs + i, 1);
                        } else
                        {
                            Toolkit.getDefaultToolkit().beep();
                            return;
                        }
                    } else
                    {
                        length++;
                    }
                }            super.insertString(offs, new String(number), a);
            }        private boolean haveDot;
            private int length;        IntOnlyDocument()
            {
                haveDot = true;
                length = 0;
            }
        }
        public JIntTextField(int cols)
        {
            super(cols);
            isLimit = false;
        }    public JIntTextField(int cols, int max, int min)
        {
            super(cols);
            isLimit = false;
            if(max > min)
            {
                MAX = max;
                MIN = min;
                isLimit = true;
            }
        }    public void setRange(int max, int min)
        {
            if(max > min)
            {
                MAX = max;
                MIN = min;
                isLimit = true;
            }
        }
        /**
         * 主函数\u2014\u2014测试
         * @param args String[]
         */
        public static void main(String args[])
        {
            try
            {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            }
            catch(Exception exception) { }
            JFrame frame = new JFrame();
            frame.setTitle("JNumberField Demo");
            frame.getContentPane().setLayout(new FlowLayout());
            frame.getContentPane().add(new JIntTextField(10), "Center");
            frame.setSize(400, 320);
            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
            frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
            frame.setVisible(true);
        }    protected Document createDefaultModel()
        {
            return new IntOnlyDocument();
        }    private int MAX;
        private int MIN;
        private boolean isLimit;
    }
    直接运行,希望对你有帮助
      

  8.   

    文本框只能输入数字代码:
    <input type="text" value="" onkeyup="this.value=this.value.replace(/\D/g,'')" />  
      

  9.   

    文本修改会触发事件,写一个事件方法
    public void onKeyDown(Event event) {
    System.out.println(event.character);
    if(!(event.character>='0' &&event.character<='9') ){
    event.keyCode=0;
    event.doit=false;
    }
    }
      

  10.   

    用正则表达式
    String str = JOptionPane.showInputDialog("请输入要排序的数:");
    Matcher m=Pattern.compile("(\\d{"+str.length()+"})").matcher(str);
    if(m.matches()){
    System.out.println("输入的是数字  "+m.group(1));

    } else {
    System.out.println("输入的含有字母" + str);

    }