public class KeyListener extends KeyAdapter
{
@Override
public void keyReleased(KeyEvent ke)
{
try
{
char i = ke.getKeyChar();
String asteriskNum = passwordJTextField.getText();
String str = Character.toString(i);
if(i == KeyEvent.VK_BACK_SPACE)
{
pswdAL.remove(pswdAL.size() - 1);
}
我还有其他一些东西。
我的问题是,在这个keyReleased方法的最后,我在我正在收听的JTextField中设置了文本。这似乎再次触发它并在我的密码ArrayList中删除另外一个字符。
我很好奇为什么。上面的行是我从ArrayList中删除一个字符的唯一地方。这必然意味着当setText发生时,char i实际上是KeyEvent.VK_BACK_SPACE。我不知道为什么会这样。但有没有办法确保if语句不是由setText触发的?
更新:我找到了一个临时修复程序。我重写了keyPressed方法,并使一个布尔值被释放。在keyPressed中,我将其设置为false。在keyReleased中,我将其设置为true。因此,由于setText,它不会再次通过。如果你按下一个键,它就会通过。