是否可以打印可由用户编辑的文本(用于控制台程序)?

时间:2009-10-12 00:03:59

标签: java println

假设我允许用户编辑某些内容,例如地址簿中的电话号码(实际上,这正是我正在做的事情)。有什么东西我可以添加到println,允许我插入一个变量显示为完全可编辑的文本?我正在做的这项任务并没有实际上要求这一点,但我认为这样做很酷。我正在谷歌上找不到任何东西,然后我再也不知道我在寻找什么以及我是否有正确的术语......

3 个答案:

答案 0 :(得分:3)

不,不仅仅使用Java在框架中提供的内容。

需要编辑一些文字
  1. 按键操作,这在Java中是不可能的,输入被缓冲(即等待按下Enter键)
  2. 在您输出的文本中移动,这也是不可能的
  3. 这可以使用一些本机代码(使用ncurse on linux,...),使用JNI或JNA完成,但不是那么容易。

    请注意,有些项目旨在添加这些功能,因此,如果您可以使用核心库之外的内容,则可以尝试使用它们......例如http://code.google.com/p/java-console-api/

答案 1 :(得分:1)

对于功能和复杂性的简单性和可移植性,有各种各样的选项:

  1. 只需提示输入信息,阅读完整的(返回终止的)响应行,并允许正常的终端输入设施用于基本编辑。

  2. 使用类似gnu readline库的内容来进行更高级的编辑。尽管如此,您仍然不会有小部件(屏幕上特定位置的文本输入框)。这里有一个java实现:http://java-readline.sourceforge.net/

  3. 使用像ncurses这样的东西来专门定位光标,打印文本标签,处理按键,并实现自己的文本输入框。不好玩。

  4. 使用文本用户界面库(TUI),如下所示:http://www.bmsi.com/tuipeer/

答案 2 :(得分:0)

如果你打开一个看起来像控制台窗口的窗口,并且可以对按键事件作出反应,那么你可以按照你的要求做,但是,如果你只是运行一个程序,程序将停止执行,将控制权返回给您的控制台,因此它无法执行任何其他操作。

但是,如果你使用java的脚本版本,你可以编写自己的shell,然后你可以做你想要的,因为shell不会停止执行。

但是,这可能超出了你的路程。