如何检查keyText是否由setText触发?

时间:2016-02-19 11:26:45

标签: java actionlistener jtextfield keylistener settext

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,它不会再次通过。如果你按下一个键,它就会通过。

0 个答案:

没有答案