Как проверить, является ли введенный текст числовым числом? - PullRequest
2 голосов
/ 05 августа 2010

У меня есть приложение для расчета, которое мне нужно для проверки полей, чтобы проверить, являются ли введенные значения числовыми, а не буквенно-цифровыми. У меня есть идеи по поводу кодов.
Пожалуйста, помогите мне, если я сделал что-то не так или покажусь нубом, так как я впервые пробую Swing.

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
    String text1 = jTextField1.getText();            // TODO add your handling code here:
}

private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
    String text2 = jTextField2.getText();        // TODO add your handling code here:
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    if (text1 and text2 != <numeric number>){
        JOptionPane.showConfirmDialog(null, "Please enter numbers only", "naughty", JOptionPane.CANCEL_OPTION);
    }
    // First we define float variables.
    float num1, num2, result;
    // We have to parse the text to a type float.
    num1 = Float.parseFloat(jTextField1.getText());
    num2 = Float.parseFloat(jTextField2.getText());
    // Now we can perform the addition.
    result = num1+num2;
    // We will now pass the value of result to jTextField3.
    // At the same time, we are going to
    // change the value of result from a float to a string.
    jTextField3.setText(String.valueOf(result));
    // TODO add your handling code here:
}

Пожалуйста, помогите. Кстати, почему мой NetBeans постоянно сообщает мне, что он не распознает команду «JOptionPane»?

Ответы [ 6 ]

7 голосов
/ 05 августа 2010

Float.parseFloat() выдаст NumberFormatException, если String не является числовым и не может быть проанализировано в Float.Вы можете добавить блок try-catch, чтобы проверить это условие:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    float num1, num2, result;

    try {
        num1 = Float.parseFloat(jTextField1.getText());
        num2 = Float.parseFloat(jTextField2.getText());
        result = num1+num2;
        jTextField3.setText(String.valueOf(result));

    } catch (NumberFormatException e) {
        JOptionPane.showConfirmDialog(null, "Please enter numbers only", "naughty", JOptionPane.CANCEL_OPTION);
    }
}
2 голосов
/ 05 августа 2010

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

Используя средства форматирования, которые предоставляет Swing, вы можете настроить отформатированные текстовые поля для ввода дат и чисел в локализованных форматах. Модуль форматирования другого типа позволяет использовать маску символов, чтобы указать набор символов, которые можно вводить в каждой позиции в поле. Например, вы можете указать маску для ввода телефонных номеров в определенном формате, например (XX) X-XX-XX-XX-XX.

Тем не менее, вы можете, среди прочего, использовать Integer.parseInt(String s), чтобы посмотреть, может ли произвольная строка быть проанализирована в int; метод выдает NumberFormatException, если не может. Есть также Double.parseDouble и т. Д.

Смотри также

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

1 голос
/ 05 августа 2010
try {
    Integer.parseInt(foo);
} catch (NumberFormatException e) {
    // Naughty
}
0 голосов
/ 11 июня 2015
textFieldCrDays = new JTextField();
    textFieldCrDays.addKeyListener(new KeyAdapter() {
        //// validate onlu numeric value
        public void keyTyped(KeyEvent e) {
            if (textFieldCrDays.getText().length() < 3 && e.getKeyChar() >='0' && e.getKeyChar() <= '9')
            {
                // Optional
                super.keyTyped(e);
            }
            else
            {
                // Discard the event
                e.consume();
            }
        }
    });
0 голосов
/ 18 февраля 2014

Попробуйте:

String temp = txtField.getText();
try 
  {
    int val = Integer.parseInt(temp);
  }
catch(NumberFormatException e) {
  System.out.println("Invalid");
 }

Чтобы сделать его более приятным, используйте JOptionPane (делает его более интерактивным)

0 голосов
/ 24 октября 2011

Относительно старый вопрос, но я решил, что я бы попробовал его, чтобы, возможно, помочь случайным поискам в Google.

Еще один подход, который можно использовать, чтобы минимизировать код и уменьшить количество дополнительных классов, этодобавить KeyListener для события keyType и проверить значение Char .Это не очень переносимо (вы не можете использовать специфичное для региона форматирование, такое как числовая пунктуация), но это может быть очень полезно для целых чисел.Здесь также можно указать относительную длину:

textField.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyTyped(KeyEvent keyEvent)
    {
        if (textField.getText().length() < 3 && keyEvent.getKeyChar() >= '0' && keyEvent.getKeyChar() <= '9')
        {
            // Optional
            super.keyTyped(keyEvent);
        }
        else
        {
            // Discard the event
            keyEvent.consume();
        }
    }
});

Вы также можете добавить еще один прослушиватель событий для проверки целого числа для дальнейшей обработки (например, полное число должно быть> 800 и <5220).Хорошим местом для этого было бы событие focusLost (?). </p>

Если вы часто используете эти функции, было бы лучше создать подкласс класса JTextField, чтобы обеспечить эту функциональность.

РЕДАКТИРОВАТЬ: Использование Character.isLetter(keyEvent.getKeyChar()) еще яснее.

...