我正在开发一个程序,例如Linux中的终端或Windows中的命令提示符,但我是在Linux上开发它,并且不太关心可移植性。
该程序是用 Java 编写的,使用 SWT。
用户在文本框中写入命令,当他按“回车”时,它会读取该行并解释它。
问题是用户在文本框中写入命令,因此他可以在其中的任何位置自由写入。
我想限制他只在文本框的最后一行写入。我不想让他改变光标的位置并以任何方式书写。
提前致谢
最佳答案
我在.NET 中编写了一个类似终端的控件。它不是基于java的,但我认为你可以重用其中的一些逻辑:
http://wpfterminal.codeplex.com/
请注意,我并不想这么快发布这个项目,我是为你做的,所以它可能需要一些清理,以及一些错误跟踪。但无论如何,目前它工作得完美无缺。
您可以在此屏幕截图中看到一个示例(终端集成在一个更大的项目中):
http://images4.hiboox.com/images/4210/0a2809b63e05c3d0cac678962e0e3d5a.jpg
我的解决方案
.
基 native 制
实际上我所做的是定义一个 lastPromptIndex
整数,每次用户按 ENTER 键并出现新提示时,该值都会更新。
之后就很简单了,您只需要在文本框验证输入之前处理任何文本输入即可。如果文本框插入符号位于 lastPromptIndex
之前,则需要引发错误(通常是蜂鸣声)并且必须使文本输入无效,因此不会在文本框。我还自动将插入符号位置设置到文本框的末尾,以便用户可以立即输入一些文本。
扩展
如果插入符号位于提示索引之前,您可以通过查找“UP 键”输入来启用命令完成功能。您需要的只是在输入事件发送到文本框内部机制之前对其进行处理。我不知道 SWT 控件是否允许这样做,但我很确定它们允许这样做,就像任何严肃的 UI 系统一样。
<小时/>其他解决方案
.
JTERM
我记得我的一个 friend 在Java应用程序中使用了终端,在他的源代码中,我发现if是来自JTerm的控件,看一下:
http://www.acordex.com/vtj/JTerm.html
关于java - 仅在 Java SWT 中文本框的最后一行写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4025735/