Как перехватить нажатие клавиш при переходе на Java Swing JTextField? - PullRequest
1 голос
/ 02 сентября 2010

JTextField - это экран калькулятора, инициализированный на ноль, и неправильно отображать десятичное число с начальным 0, например 0123 или 00123. Цифровые кнопки (0..9) в JBrame NetBeans Swing используют append () [ ниже], чтобы отбросить начальные нули, но пользователь может предпочесть клавиатуру мышке, и также необходимо обрабатывать нечисловые символы.

private void append(String s) {
    if (newEntry) {
        newEntry = false;
        calcDisplay.setText(s);
    } else if (0 != Float.parseFloat(calcDisplay.getText().toString())) {
        calcDisplay.setText(calcDisplay.getText().toString() + s);
    }
}

Ответы [ 2 ]

5 голосов
/ 02 сентября 2010

Вы можете ограничить ввод символов в JTextField, добавив пользовательский KeyListener. Вот быстрый пример, чтобы продемонстрировать идею:

myTextField.addKeyListener(new KeyAdapter() {
  @Override
  public void keyTyped(KeyEvent e) {
    char c = e.getKeyChar();
    if (!Character.isDigit(c)) {
      e.consume(); // Stop the event from propagating.
    }
  }
});

Конечно, вам нужно учитывать специальные клавиши, такие как Delete, и комбинации, такие как CTRL-C, поэтому ваш KeyListener должен быть более сложным. Вероятно, есть даже свободно доступные утилиты, которые выполняют большую часть тяжелой работы за вас.

3 голосов
/ 02 сентября 2010

Вы можете сделать это с помощью DocumentFilter.

Вот простой полный пример программы.

...