2013-12-09 2 views
0

Мне нужно проверить java text field, который принимает только целые значения с максимальной длиной 10. Ввод других значений должен быть пропущен.Проверка текстового поля Java

Я пробовал это следующим образом. в этом случае я не могу набрать полную остановку.

private void jTextField2KeyTyped(java.awt.event.KeyEvent evt) {          
     char c = evt.getKeyChar(); 

     if(!(Character.isDigit(c) || (c==KeyEvent.VK_BACK_SPACE)||(c==KeyEvent.VK_STOP))){ 
      getToolkit().beep(); 

      evt.consume(); 

      } 

    }   
+2

И ваш вопрос .... – Maroun

ответ

3

Используйте поле JFormattedText не JTextField, а затем вы можете указать маску, чтобы ограничить то, что может быть введен (или пользователь номер форматировщик, чтобы он автоматически обрабатывается как номер для вас).

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

+0

то, как я могу сделать это с помощью JFormattedTextField –

+0

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

+1

Простым способом создания JFormattedTextField, который принимает число, является «новый JFormattedTextField (новый NumberFormatter (NumberFormat.getIntegerInstance())). Чтобы ограничить количество символов, вы можете переопределить метод getDocumentFilter NumberFormatter, но я подозреваю, что вы действительно хотите разместить максимум на числовом значении, и в этом случае гораздо проще использовать «новый JSpinner (новый SpinnerNumberModel (0L, 0L) , 9_999_999_999L, 1L)) '. – VGR

3

Для того, что цели можно использовать DocumentFilter как следующий:

JTextField f = new JTextField(10); 
((AbstractDocument)f.getDocument()).setDocumentFilter(new DocumentFilter(){ 
    Pattern pattern = Pattern.compile("\\d*"); 

    @Override 
    public void replace(FilterBypass arg0, int arg1, int arg2, String arg3, AttributeSet arg4) throws BadLocationException { 
     String text = arg0.getDocument().getText(0, arg0.getDocument().getLength())+arg3; 
     Matcher matcher = pattern.matcher(text); 
     if(!matcher.matches()){ 
      return; 
     } 
     if(text.length()>10){ 
      return; 
     } 
     super.replace(arg0, arg1, arg2, arg3, arg4); 
    } 
}); 
+0

thanx .. я новичок в java. можете ли вы объяснить, как я могу это сделать? –

+0

код в моем ответе делает то, что вы хотите. Создает новый 'JTextField' и устанавливает' DocumentFilter', который имеет регулярное выражение для проверки цифр и длины проверки. – alex2410

+0

Как установить DocumentFilter в JTextField? –

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