Дефисы, которые невозможно удалить из JTextField - PullRequest
0 голосов
/ 15 апреля 2020

Итак, у меня есть JTextField, который получает входной номер 10-ди git и редактирует данный номер телефона в этом формате XXX-XXX-XXXX. Когда кто-то пытается стереть последние четыре цифры, удалить дефис невозможно. Я попытался исправить это с помощью метода KeyTyped, но я обнаружил, что ключ BackSpace не может использовать этот метод, только KeyPressed или KeyRelease, поэтому я использовал для него метод KeyReleased, и теперь он будет удалять дефисы, но он будет удалять более 1 di git за каждый раз, когда я нажимаю клавишу возврата. Если бы кто-нибудь мог успешно выполнить sh это лучшим способом, который позволяет стереть только один ди git за удар, я все глаза.

Это слушатель для моего JTextField:

public class PhoneList implements KeyListener {

        @Override
        public void keyTyped(KeyEvent e) {
            // Allow Numbers only
            char testChar = e.getKeyChar();
            if (!Character.isDigit(testChar)) {
                e.consume();
            }
            String pnText = pntf.getText();
            int pnLength = pnText.length();
            // Add the hyphens
            if (pnLength == 3 || pnLength == 7) {
                pntf.setText(pnText + "-");
            }
            // Limited to 10-digit numbers
            if (pnLength >= 12) {
                e.consume();
            }

        }

        @Override
        public void keyPressed(KeyEvent e) { //Empty  }

        @Override
        public void keyReleased(KeyEvent e) {
            // Erase numbers and also hyphens
            boolean released = false;
            if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE && released == false) {
                String pnTxt = pntf.getText();
                int pnL = pnTxt.length();
                if (pnL > 1) {
                    int start = 0;
                    int end = pnL - 1;
                    String pnErased = pnTxt.substring(start, end);
                    released = true;
                    pntf.setText(pnErased);
                } else {
                    pntf.setText("");
                    released = true;
                }
            }
        }

    }
...