Отключить ввод некоторых символов в JTextField - PullRequest
7 голосов
/ 01 февраля 2011

Как я могу отключить ввод любого символа, кроме цифр, до JTextField?

Ответы [ 7 ]

20 голосов
/ 01 февраля 2011

Вариант 1) замените JTextField на JFormattedTextField, например так:

try {
   MaskFormatter mascara = new MaskFormatter("##.##");
   JFormattedTextField textField = new JFormattedTextField(mascara);
   textField.setValue(new Float("12.34"));
} catch (Exception e) {
   ...
}

Вариант 2) захват пользовательского ввода с клавиатуры, например:

JTextField textField = new JTextField(10);
textField.addKeyListener(new KeyAdapter() {
   public void keyTyped(KeyEvent e) {
      char c = e.getKeyChar();
      if ( ((c < '0') || (c > '9')) && (c != KeyEvent.VK_BACK_SPACE)) {
         e.consume();  // ignore event
      }
   }
});
7 голосов
/ 01 февраля 2011

Ответ JFormattedTextField. Смотрите мой ответ на этот дубликат вопроса :

Вы можете использовать JFormattedTextField. Создайте его, используя NumberFormatter, и он будет принимать только числа.

JFormattedTextField имеет множество настраиваемых опций, которые позволяют вам решить, как обрабатывается неверный ввод. Я рекомендую посмотреть документацию.

3 голосов
/ 01 февраля 2011

Просто используйте все символы, которые не являются цифрами, как это:

public static void main(String[] args) {
    JFrame frame = new JFrame("Test");

    frame.add(new JTextField() {{
        addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                if (!Character.isDigit(e.getKeyChar()))
                    e.consume();
            }
        });
    }});

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}
2 голосов
/ 01 февраля 2011

Для лучшего пользовательского опыта

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

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

2 голосов
/ 01 февраля 2011

Как использовать поля форматированного текста

 amountField = new JFormattedTextField(NumberFormat.getIntegerInstance());

Вы также можете создать свой собственный формат для настройки.

0 голосов
/ 31 июля 2013

Это сработало для меня.Посмотрите.

public void keyTyped(KeyEvent e)
{

  char c = e.getKeyChar();

  if (!((c >= '0') && (c <= '9') ||    
     (c == KeyEvent.VK_BACK_SPACE) ||
     (c == KeyEvent.VK_DELETE))) {

        getToolkit().beep();

        e.consume();

  }

}
0 голосов
/ 01 февраля 2011

Вы можете добавить пользовательский KeyListener, который перехватывает нажатия клавиш и не распространяет недействительные нажатия клавиш на JTextField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...