捕捉用户的输入保存在一个字符串中,然后用Integer.parseInt转换,用formatException进行出错处理,就可以实现你想要的

解决方案 »

  1.   

    如果是控制台:
    int m;
    while(true){
     try{
        m = Integer.parseInt("string");
        break;
    }
    catch(NumberFormatException e){
     System.out.println("Please input a Number");
    }
    }
    如果是GUI程序,比如在JTextArea中输入,则可加入一个监听器,来判断文本变化了后的值是否为数字!
    这里只列出int类型,其他类型一样的
      

  2.   

    import java.awt.event.*;
    import javax.swing.*;public class NumField extends JTextField implements KeyListener{
    public NumField(){
    addKeyListener(this);
    }

    public void keyTyped(KeyEvent e){
    char keyChar = e.getKeyChar(); //新输入的字符
    if(
       (keyChar >= '0' && keyChar <= '9') //数字
    || (keyChar == '-' && getCaretPosition() == 0) //在不存在"-"的字符串首输入负号
    || (keyChar == '.' && getText().indexOf(".") == -1) //在没有"."的字符串输入小数点
                      ){
    return; //以上是合法的
    }
    e.consume(); //否则"消费"掉这个事件JTextField不再处理这个新字符
    }

    public void keyPressed(KeyEvent e){}

    public void keyReleased(KeyEvent e){}         public double getDouble() throws NumberFormatException{
                 return Double.parseDouble(getText());
             }
    }
      

  3.   

    只可惜,Backspace好像,不好使了
      

  4.   

    public double getDouble() throws NumberFormatException{
                 return Double.parseDouble(getText());}是什么意思好象没有什么用
      

  5.   

    import javax.swing.*;
    import javax.swing.text.*;
    import java.awt.event.*;
    import java.awt.*;public class NumberInputer extends JTextField implements KeyListener, MouseWheelListener{
    double stepSize = 1;
    Toolkit toolkit = Toolkit.getDefaultToolkit();

    public NumberInputer(){
    Keymap keymap = getKeymap();
    keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0),
    new AbstractAction(){
    public void actionPerformed(ActionEvent e){
    nextStep();
    }
    });
    keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0),
    new AbstractAction(){
    public void actionPerformed(ActionEvent e){
    previousStep();
    }
    });
    addKeyListener(this);
    addMouseWheelListener(this);
    setHorizontalAlignment(RIGHT);
    }

    public void paste(){
    //Ctrl-V not allowed here to prevent illegal inputs.
    }

    public void keyTyped(KeyEvent e){
    char keyChar = e.getKeyChar();
    if((keyChar >= '0' && keyChar <= '9') //Digits
    || (keyChar == '-' && getCaretPosition() == 0 && getText().indexOf("-") == -1) //Sign
    || (keyChar == '.' && getText().indexOf(".") == -1) //Radix point
    || (keyChar == '\b') //Backspace
    ){
    return;
    }

    toolkit.beep();
    e.consume(); //Stop the illegal inputs from being added to the text field.
    }

    public void keyPressed(KeyEvent e){}

    public void keyReleased(KeyEvent e){}

    public void mouseWheelMoved(MouseWheelEvent e){
    if(e.getWheelRotation() < 0){
    nextStep();
    }else{
    previousStep();
    }
    } public double getStepSize(){
    return stepSize;
    }

    public void setStepSize(double s){
    stepSize = s;
    }

    public void nextStep(){
    try{
    double value = getDouble();
    String newText = String.valueOf(value + stepSize);
    setText(((int) value == value) ? newText.substring(0, newText.indexOf(".")) : newText);
    }catch(NumberFormatException e){}
    }

    public void previousStep(){
    try{
    double value = getDouble();
    String newText = String.valueOf(value - stepSize);
    setText(((int) value == value) ? newText.substring(0, newText.indexOf(".")) : newText);
    }catch(NumberFormatException e){}
    }

    public double getDouble() throws NumberFormatException{
    return Double.parseDouble(getText());
    }

    public float getFloat() throws NumberFormatException{
    return Float.parseFloat(getText());
    }

    public int getInt() throws NumberFormatException{
    return Integer.parseInt(getText());
    }

    public long getLong() throws NumberFormatException{
    return Long.parseLong(getText());
    }
    }这是你要的只接受数字的文本框,
    getDouble()什么的在输入框为空时是不起作用的用法:public class Test{
    public static void main(String[] args){
    JFrame f = new JFrame();
    final NumberInputer ni = new NumberInputer();
    ni.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    System.out.println(ni.getDouble());
    }
    });
    f.getContentPane().add(ni);
    f.setSize(200, 60);
    f.setDefaultCloseOperation(f.DISPOSE_ON_CLOSE);
    f.show();
    }
    }按回车时可以看到输出