运行环境是linux需要在终端运行的console程序下添加对应于方向键的光标左移/右移功能,以便对已经输入的命令进行插入或修改我写的方法是用read()读取每个键盘输入的字符,然后将字符存入一个StringBuffer中,在左移的方法中,定义一个位置变量pre_position,
在按下左方向键后,将StringBuffer进行toString后拆分赋给str1和str2, str1为位置变量前的部分,str2为位置变量后的部分,然后将StringBuffer清零,
将str1重新赋给StringBuffer, 因为本行命令已经打印出来,所以我本来打算是从当前行的最开头重新打印StringBuffer,这样光标位置就左移了一位,并且最右边的一个先前已经打印出来的字符就被保留了下来。可实际操作中发现重新打印的时候是以最右边的字符为基准打印的,这样被保留下来的反而是最左边的字符各位大大有没有人知道该如何做啊?
或者有控制光标左移/右移的方法,或者能够明确让命令行重新打印的时候能够确定的从一行的最左边开始打印
在按下左方向键后,将StringBuffer进行toString后拆分赋给str1和str2, str1为位置变量前的部分,str2为位置变量后的部分,然后将StringBuffer清零,
将str1重新赋给StringBuffer, 因为本行命令已经打印出来,所以我本来打算是从当前行的最开头重新打印StringBuffer,这样光标位置就左移了一位,并且最右边的一个先前已经打印出来的字符就被保留了下来。可实际操作中发现重新打印的时候是以最右边的字符为基准打印的,这样被保留下来的反而是最左边的字符各位大大有没有人知道该如何做啊?
或者有控制光标左移/右移的方法,或者能够明确让命令行重新打印的时候能够确定的从一行的最左边开始打印
Sorry,能力有限,顶一下!
不知道。
友情UP
不过要是知道增样控制字符闪烁也可以解决这个问题
后台的逻辑已经没有问题了,就是在终端显示上无法得到所需的结果
它调用了一些DLL,不过具体的没有用过。
最初的时候,我们读取命令的时候没有使用read(),而是使用readLine(),对于键盘输入并没有进行捕获,以UP方向键为例,
当按下up键时,屏幕上会打印出^[A的字符,而up键的keycode是由这三个字符组成的,分别是27,91,65
当我们进行捕获之后,由于之前并没有对字符进行打印操作,所以没有得到预期结果
后来在偶然的情况下发现了使用
System.out.print((char)27);
System.out.print((char)91);
System.out.print((char)65);
的代码反而实现了光标左移总结:在未捕获键盘keycode时按下方向键系统会将方向键的三个键值分别以字符形式打印出来
而当我们捕获了键盘keycode后,再使用system.out.print();将三个键值连续打印出来后反而实现了光标左移问题:希望哪位大侠知道的给指点一下,谢谢了
27是esc,应该是不可视的,看不到效果,可能会“滴”的一声响。
91是“[”,65是“A”不应该是左移啊。
可能在window下会不一样。
比较疑惑的是在没捕捉键值的情况下终端会打出这三个值单独所代表的字符,捕捉了然后sys.out反而实现了