仅写入Java SWT中文本框的最后一行

时间:2010-10-26 16:28:18

标签: java terminal swt

我正在开发一个像Linux中的终端或Windows中的命令提示符这样的程序,但我正在Linux上开发它,我并不关心可移植性。

程序是用Java编写的,使用SWT。

用户在文本框中写入命令,当他按下“输入”时,它会读取该行并对其进行解释。

问题在于用户将其命令写入文本框中,因此他可以在其中的任何位置自由编写。

我想限制他只在文本框的最后一行写。我不希望他改变光标的位置并以任何方式写入。

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以使用2个文本小部件来模拟终端会话。

一个用于输入命令,另一个用于显示命令和响应。

条目文本小部件只需要接受70到80个字符左右。

显示文本小部件将滚动并显示最新的命令和响应。

答案 1 :(得分:1)

我在.NET中编写了一个类似终端的控件。它不是基于java的,但我认为你可以重用其中的一些逻辑:

http://wpfterminal.codeplex.com/

请注意,我不打算这么快就发布这个项目,我是为你做的,所以可能需要一些清理,以及一些bug跟踪。但无论如何,它现在完美无瑕。

您可以在此屏幕截图中看到一个示例(终端集成在一个更大的项目中):
http://images4.hiboox.com/images/4210/0a2809b63e05c3d0cac678962e0e3d5a.jpg


我的解决方案

基本机制

实际上我所做的是定义 lastPromptIndex 整数,每次用户按下ENTER键并出现新提示时,此值都会更新。

之后,很简单,您只需要在文本框验证输入之前处理任何文本输入。如果文本框插入符号位于 lastPromptIndex 之前,则需要引发错误(通常是哔声),并且必须使文本输入无效,因此文本框中不会写入任何内容。我还自动将插入位置设置到文本框的末尾,这样用户就可以立即输入一些文本。

扩展

如果插入符号位于提示索引之前,您可以通过查找“UP键”输入来启用命令完成等。您需要的只是在将输入事件发送到文本框内部机制之前处理输入事件。我不知道SWT控件是否允许它,但我很确定它们会像任何严肃的UI系统一样。


其他解决方案

JTERM

我记得我的一个朋友在Java应用程序中使用了一个终端,在他的消息来源中,我发现如果是来自JTerm的控件,请查看它:
http://www.acordex.com/vtj/JTerm.html