Санкционировать каркасный метод изображения объекта и реестр с регулярными выражениями в Java

У меня есть два поля: Каркасный метод изображения объекта и реестр. Я хочу санкционировать оба jTextField.

Каркасный метод изображения объекта: точное число символов = 15. Иначе сообщение бдительности на экране. Внеси в списки: 4 числа + 3 буквы. Формат: nnnnXXX. Иначе сообщение бдительности на экране.

Мое сомнение, - в котором в существо keyTiped подтверди символ в символ, если он проходит 15 или не прибывает к 15, но всегда он не будет прибывать к 2 ни, в первом символе он даст ошибку

Код:

private void textfield_bastidorKeyTyped (java.awt.event.KeyEvent evt) {   
    if (textfield_bastidor.getText().length() >= 15) {
        evt.consume();
        JOptionPane.showMessageDialog(rootPane, "El bastidor tiene una longitud de 15 caracteres.");
    }
}                                           

private void textfield_matriculaKeyTyped (java.awt.event.KeyEvent evt) {                                             
    Pattern pat = Pattern.compile("^[0-9]{4}[a-zA-Z]{3}$");
    Matcher mat = pat.matcher(textfield_matricula.getText());
    if (mat.matches()) {
        System.out.println("codigo de que es correcto");
    } else {
        System.out.println("codigo de que es incorrecto");
    }
} 
0
задан 17.01.2017, 08:57
1 ответ

В первом случае, займите твой код и функционируй совершенно, я не вижу ошибку.

Во втором случае, когда ты выполняешь событие keyPress, или keyTyped первая стоимость, которую он вводит, - пустая. Если ты пишешь в тебе textfield 1, в первой инстанции он окажется пустым, во второй инстанции, если ты добавляешь два (а именно 12) покажет 1.

Есть событие также названо keyReleased, которые приносят точную стоимость, когда пользователь посылает клавишу. Кроме которого твое регулярное выражение было плохое, ты должен делать это в этом событии.

KeyListener keyListener2 = new KeyListener() {
    public void keyPressed(KeyEvent keyEvent) {

    }

    public void keyReleased(KeyEvent keyEvent) {
        Pattern pat = Pattern.compile("^\\d{4}[A-Z]{3}");
        Matcher mat = pat.matcher(textField2.getText());
        if (mat.matches()) {
            System.out.println("codigo de que es correcto");
        } else {
            System.out.println("codigo de que es incorrecto");
        }
    }

    public void keyTyped(KeyEvent keyEvent) {

    }
};

textField2.addKeyListener(keyListener2);

expresiГіn регулировать, что я дал тебе, принимает формат nnnnAAA (4 числа и 3 буквы) будучи:

  • ^ Показывает, что это цепь
  • \d, Показывает, что число цифры (0-9)
  • {4}, которая ждет количество 4 для предыдущего главного файла
  • [A-Z] буквы A в Z
  • {3}, которые ждут количество 3 для предыдущего главного файла

РЕДАКТИРОВАНИЕ

, Так как мы поняли лучше проблему первого случая, ты можешь пробовать что-либо подобное:

JLabel myLabel = new JLabel("El bastidor debe tener 15 caracteres");

getContentPane().add(myLabel, BorderLayout.WEST);
KeyListener keyListener = new KeyListener() {
    public void keyPressed(KeyEvent keyEvent) {

    }

    public void keyReleased(KeyEvent keyEvent) {
        if (textField1.getText().length() == 15) {
            myLabel.setVisible(false);
            //JOptionPane.showMessageDialog(rootPane, "El bastidor tiene una longitud de 15 caracteres.");
        } else {
            myLabel.setVisible(true);
        }
    }

    public void keyTyped(KeyEvent keyEvent) {

    }
};
textField1.addKeyListener(keyListener);

introducir la descripción de la imagen aquí

1
ответ дан 24.11.2019, 11:53
  • 1
    В первом случае sí существуй ошибка, благодаря тому, что, если ты вводишь 12 символов, он дает это тебе из-за vá lido и не deberí чтобы быть así единственный дебет принимать длину 15 символов, ни меньше ни больше, точно 15. – omaza1990 23.12.2016, 19:31
  • 2
    ahhh!! дело в том, что он поэтому комментировал тебе, что он объясняет тебе, s только ты должен менять сравнение > = из-за! = – sioesi 23.12.2016, 19:32
  • 3
    но с KeyTyped он будет давать тебе ошибку первой клавише, которую ты вводишь. Если я ввожу клавишу, я подтверждаю, 15 ли длины, и как он это не, так как сообщение ошибки, и мы вновь начинаемся. – omaza1990 23.12.2016, 19:34
  • 4
    проблема там, в котором никогда его не будет быть 15, пока я не ввел 15 в компьютер, следовательно согласно твоему коду БУДЬ ДОЛЖЕН посылать сообщение. То, что я сделал бы, состоит в том, чтобы показывать Jlabel рядом, который говорил бы, что он должен быть 15 и скрывать это, когда его будет 15 точно – sioesi 23.12.2016, 19:37
  • 5
    хорошая идея, что не я habí в произошедший. Или показывать информационное сообщение в jLabel и во время ввождения вводить / посылать / mandar_formulario подтверждать, что их 15, и если они это не сейчас sí показывать сообщение ошибки и посылать фотографию в поле jTextField erró neo. – omaza1990 23.12.2016, 19:38