2012-03-23 5 views
0

В настоящее время я создаю этот графический интерфейс java, который попросит пользователя ввести 10 записей, а затем использовать значения, чтобы выполнить следующее действие.Как ограничить пользователя вводить только цифры?

Я хочу ввести только цифры или десятичную точку, чтобы она могла быть только значением поплавка.

Если это не цифра или десятичная точка, она должна предлагать пользователю ввести эту конкретную запись еще до того, как будет выполнено следующее действие.

Как мне это сделать?

+0

http://docs.oracle.com/javase/tutorial/uiswing/components /formattedtextfield.html – maialithar

+0

Вы используете качели или апплет? – Jayy

ответ

1

Существуют различные варианты того, что вы хотели бы сделать. Вы можете проверить here для примера. Другим примером может быть использование форматированных текстовых полей, как показано на рисунке here.

С другой стороны, при подаче вы можете попытаться проанализировать значение на float или double. Если вы получаете какие-либо исключения, то значение не является числом.

Наконец, вы можете использовать регулярные выражения. Выражение, такое как ^\\d+(\\.\\d+)?$, должно соответствовать любому числу целых чисел или чисел с плавающей запятой.

2

Вонг,

не уверены, используете ли вы свинг или нет ...

века назад у меня была такая же проблема, и я решил его с созданием класса RestrictedTextField простирающуюся JTextField. В конструкторе я добавил ключ слушателя (addKeyListener (новый RestrictedKeyAdapter());)

private class RestrictedKeyAdapter extends KeyAdapter { 

    @Override 
    public void keyReleased(KeyEvent e) { 

     if (getText().equals("")) { 
      oldString = ""; 
      return; 
     } else { 
      // if you cannot parse the string as an int, or float, 
      // then change the text to the text before (means: ignore 
      // the user input) 
      try { 
       if (type.equals("int")) { 
        int i = Integer.parseInt(getText()); 
        oldString = getText(); 
       } else if (type.equals("float")) { 
        float f = Float.parseFloat(getText()); 
        oldString = getText(); 
       } else { 
        // do nothing 
       } 
      } catch (NumberFormatException el) { 
       setText(oldString); 
      } 

      // if the text is identical to the initial text of this 
      // textfield paint it yellow. If the text was changed 
      // paint it red. 
      if (initialString.equals(getText())) { 
       setForeground(Color.YELLOW); 
      } else { 
       setForeground(Color.RED); 
      } 
     } 
    } 
} 

Идея заключается в том, что каждый раз, когда пользователь нажимает клавишу в текстовом поле (и освобождает его тогда), текст текстовое поле анализируется. Если компонент должен принимать только поплавки, например, компонент пытается проанализировать его как float (Float.parseFloat (..)). Если этот синтаксический анализ удался, все в порядке. Если синтаксический анализ не выполняется (исключение NumberFormatException), старый текст записывается обратно в текстовое поле (буквально игнорируя ввод пользователя).

Я думаю, что вы можете добавить KeyAdapter непосредственно в JTextField, не создавая для этого выделенный класс, но с помощью этого решения вы можете вспомнить начальную строку и старую строку.

вы можете поиграть с кодом .. вы можете изменить цвет текстового поля, если вход действителен или нет (или как в моем фрагменте кода, если текст идентичен исходной строке).

один дополнительный комментарий: я задал «тип» текстового поля в переменной с именем «type», который представляет собой просто строку со значениями «int», «float» и т. Д. ... лучше решение будет здесь, например, перечисление конечно ...

Я надеюсь, что это полезно ...

Timo

+0

не использовать keyListeners когда-либо, особенно для подтверждения ввода – kleopatra

+0

........... Почему? –

+0

Ctrl + V или специальная функция ОС. –

Смежные вопросы