Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Keylistener删除ArrayList中的多个字符_Java_Arraylist_Character - Fatal编程技术网

Java 使用Keylistener删除ArrayList中的多个字符

Java 使用Keylistener删除ArrayList中的多个字符,java,arraylist,character,Java,Arraylist,Character,如果删除字符ArrayList的最后一个字符,ArrayList不会比删除字符之前短。因此,我不能删除多个字符 public static ArrayList<Character> userLineInput; if (e.getKeyChar() == '\b') { if (!userLineInput.isEmpty()) { userLineInput.remove(userLineInput.size()-1); } } pub

如果删除字符ArrayList的最后一个字符,ArrayList不会比删除字符之前短。因此,我不能删除多个字符

public static ArrayList<Character>  userLineInput;

if (e.getKeyChar() == '\b') {
    if (!userLineInput.isEmpty()) {
        userLineInput.remove(userLineInput.size()-1);
        }
}
publicstaticarraylistuserlineinput;
如果(例如getKeyChar()=='\b'){
如果(!userLineInput.isEmpty()){
userLineInput.remove(userLineInput.size()-1);
}
}

有没有一种简单的方法可以删除多个字符?

似乎需要定义如下内容:

while(keyIsPressed)
   if(thePressedKey == '\b'){
removeOneChar();
}
以下是一个快速解决方案,可以帮助您:

public class RemoveChar extends KeyAdapter {
    public static ArrayList<Character> userLineInput;
    private boolean isPressed = false;
    private int pressedKey = 0;
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            while (isPressed)
                if (pressedKey == '\b')
                    removeLastChar();
        }
    });

    @Override
    public void keyPressed(KeyEvent e) {
        if (!isPressed) {
            pressedKey = e.getKeyCode();
            t.start();
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if (isPressed && e.getKeyCode() == pressedKey)
            isPressed = false;
    }

    public void removeLastChar() {
        userLineInput.remove(userLineInput.size() - 1);
    }
}
public类RemoveChar扩展KeyAdapter{
公共静态ArrayList userLineInput;
私有布尔值isPressed=false;
private int pressedKey=0;
线程t=新线程(新的可运行线程(){
@凌驾
公开募捐{
while(isPressed)
如果(按键=='\b')
removeLastChar();
}
});
@凌驾
按下公共无效键(按键事件e){
如果(!isPressed){
按下键=e.getKeyCode();
t、 start();
}
}
@凌驾
公共无效密钥已释放(密钥事件e){
如果(按&e.getKeyCode()==按键)
isPressed=false;
}
public void removeLastChar(){
userLineInput.remove(userLineInput.size()-1);
}
}

如果第一个条件匹配,它会起作用。我已经尝试过了,但它不起作用。如果您试图删除UI中的字符,请确保您正在更新UI模型,而不仅仅是底层数据结构。但是如果我添加了“System.out.println(userLineInput.toString());”最后,它只输出userLineInput,最多删除一个字符。好的,我的Java文档中的另一个东西也可能会阻止这一点。