Как разрешить только плавающие в JTextField в Java - PullRequest
2 голосов
/ 05 января 2012

Я пытаюсь добавить простой инструмент для конвертации валют в свою программу, но я достиг барьера.Есть ли простой способ разрешить только числа с плавающей точкой в ​​качестве ввода в JTextField в Java.Из того, что я прочитал в Интернете, использование JFormattedTextField - это боль в использовании.Нужно ли создавать класс для фильтрации?

Ответы [ 4 ]

2 голосов
/ 05 января 2012

Было бы лучше использовать JFormattedTextField.

Отформатированные текстовые поля позволяют разработчикам указывать допустимый набор символов, который можно вводить в текстовом поле. В частности, класс JFormattedTextField добавляет средство форматирования и значение объекта к функциям, унаследованным от класса JTextField. Форматировщик переводит значение поля в текст, который оно отображает, а текст в значение поля. См. Примеры.

2 голосов
/ 05 января 2012

JFormattedTextField не должен быть слишком сложным.Просто нужно передать в Formatter в качестве параметра и должен позаботиться о себе.Вы можете получить это из API Java, который будет использовать настройки региона следующим образом:

new JFormattedTextField (java.text.NumberFormat.getCurrencyInstance ());

1 голос
/ 05 января 2012

Вы можете использовать JFormattedTextField, но это дает действительно ужасный пользовательский опыт.Лучше отбросить неподходящие символы при вводе.DocumentFilter обеспечивает относительно (для Swing) чистый способ сделать это.Несколько лет назад я написал тривиальный пример с source и расшифровкой блога .

0 голосов
/ 05 января 2012

Я согласен с vcetinick, потому что JFormattedTextField полезен для форматирования ввода текста.

Однако, если вы хотите проверить значение, введенное в JTextField, вам может потребоваться реализовать ActionListener самостоятельно:

public void actionPerformed(ActionEvent evt) {
    JTextField textfield = (JTextField)evt.getSource();
    String strTextValue = textfield.getText();
    try {
        if (strTextValue.equals("")) {
           // Handle empty string
        } else {
           double dValue = Double.parseDouble(strTextValue);
           // Handle valid value
        }
    } catch (Exception e) {
        // Handle invalid value
    }
}
...