Я заметил, что я получаю два разных keyCode
для тех же Char
. Вот небольшой эксперимент:Проблема с KeyEvent и KeyStroke
package main;
import com.sun.javafx.scene.control.Keystroke;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Keystroketest {
public static void main(String[] args) {
final KeyStroke ks = KeyStroke.getKeyStroke('e', 0);
System.out.println(ks.getKeyCode());
JFrame f = new JFrame();
JTextField jtf = new JTextField("");
f.setBounds(300, 300, 100, 60);
f.add(jtf);
f.setVisible(true);
jtf.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent keyEvent) {
}
@Override
public void keyPressed(KeyEvent keyEvent) {
}
@Override
public void keyReleased(KeyEvent keyEvent) {
System.out.println(keyEvent.getKeyCode());
if (keyEvent.getKeyCode() == ks.getKeyCode()) {
System.out.println("letters are similar");
} else {
System.out.println("letters aren't similar");
}
}
});
}
}
Если я печатаю в textField
букву «е», так что возвращает другой KeyCode
для одной и той же буквы, когда я анализирую его.
В чем причина? И как я могу проверить, является ли введенная вами буква/char такой же, как в определенном символе, указанном в коде, как указано выше ...?
Так что всякий раз, когда я проверяю KeyCode
, я набрал, java думает, что я не набирал ту же букву. Но это неправильно, я думаю.
Вы действительно не должны использовать «KeyListener» в текстовых полях, и если вы заинтересованы в фильтрации содержимого, вы должны использовать 'DocumentFilter' – MadProgrammer
- безгражданный, что это значит? – Synoon
Это означает, что виртуальный ключ не имеет никакой информации, чтобы отличать его от 'E' или' e' – MadProgrammer