Итак, у меня есть 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;
}
}
}
}