假设我允许用户编辑某些内容,例如地址簿中的电话号码(实际上,这正是我正在做的事情)。有什么我可以添加到 println 的东西,可以让我插入一个变量以显示为完全可编辑的文本吗?我正在为此做的任务实际上并不需要这个,但我认为拥有它会很酷。我在谷歌上寻找但找不到任何东西,然后我真的不知道我在找什么以及我是否有正确的条款......
3 回答
不,不只是使用 Java 在框架中提供的东西。编辑一些文本需要
- 对按键进行操作,这是不可能的,因为在 Java 中输入被缓冲(即,等待 Enter 被按下)
- 在您输出的文本中移动,这也是不可能的
这可以使用一些本机代码(Linux 上的 ncurse,...),使用 JNI 或 JNA 来完成,但不是那么容易。
请注意,有些项目旨在添加这些功能,因此如果您可以使用核心库之外的东西,您可以尝试一下……例如http://code.google.com/p/java-控制台-api/
有多种选择,按照简单性和可移植性到功能和复杂性的顺序:
只需提示输入信息,读取完整的(以返回结尾的)响应行,并允许使用普通终端输入工具进行基本编辑。
使用类似 gnu readline 库的东西来允许更高级的编辑。尽管如此,您仍然不会有小部件(屏幕上特定位置的文本输入框)。这里有一个java实现:http: //java-readline.sourceforge.net/
使用 ncurses 之类的东西来专门定位光标、打印文本标签、处理按键并实现您自己的文本输入框。不好玩。
使用文本用户界面库 (TUI),例如:http ://www.bmsi.com/tuipeer/
如果您打开一个看起来像控制台窗口的窗口,并且可以对按键事件做出反应,那么您可以按照您的要求做,但是,否则,如果您只是在运行一个程序,该程序将停止执行并将控制权返回给你的控制台,所以它不能做任何其他事情。
但是,如果您使用 java 的脚本版本,您可以编写自己的 shell,然后您可以按照您的要求进行操作,因为 shell 不会停止执行。
但是,这可能超出您的课程范围。