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

标签 java terminal swt

我正在开发一个程序,例如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/

相关文章:

java - 我的代码没有在数据库中写入任何内容

linux - 从Linux中的文件名文本列表中批量复制文件

java - widgetSelected() 和不同的操作系统平台行为

java - 如何在 Windows 上制作相同高度的 SWT 按钮、文本和标签?

JAVA SWT/AWT Eclipse Mac OSX Java Cocoa CompatibilityMode Enabled

java - 在实例创建或使用 new 关键字创建对象期间何时分配内存?

java - Log4j 创建 "target"文件夹,其中包含空的 "camel-spring-redis-test.log"日志文件

java - 将 Java 公历转换为字符串

macos - ksh 的 vi 模式有时会损坏编辑行 - GitHub 上的新版本修复了该问题

macos - Mac OS X/打开具有指定窗口的终端