java - Eclipse IConsole 插入符位置

标签 java eclipse

我正在使用 IOConsole 实现 Eclipse 插件,该 IOConsole 从键盘接收输入并生成输出(IOConsoleInputStream、IOConsoleOutputStream)。 我试图通过按照此处的建议扩展 TextConsoleViewer,将插入符号始终放在最后一个字符

How to set the Caret of the IOConsole

问题是,当打印输出后需要更改插入符位置时,由另一个引用输出流的线程写入的输出字符不计入控制台字符数。

这是我的代码链接

https://code.google.com/p/mdpm/source/browse/com.lowcoupling.mdpm.console/src/com/lowcoupling/mdpm/console/MDPMConsole.java

谢谢

最佳答案

setCaretOffset() 的源代码显示,如果您使用的偏移量大于文本的长度,那么将使用文本的长度,实际上是将插入符号放在末尾文本。因此,将 Integer.MAX_VALUE 设置为偏移量是一个可行的选项,无需对文本长度进行任何检查。

如果您无法收到关于冲洗何时真正完成的通知,我建议您将插入符号的放置延迟几百毫秒。它不会分散用户的注意力,并为您提供强大的解决方案。

作为引用,这里是setCaretOffset()的源代码:

public void setCaretOffset(int offset) {
    checkWidget();
    int length = getCharCount();
    if (length > 0 && offset != caretOffset) {
        if (offset < 0) {
            offset = 0;
        } else if (offset > length) {
            offset = length;  // <-- use the length as offset
        } else {
            if (isLineDelimiter(offset)) {
                // offset is inside a multi byte line delimiter. This is an 
                // illegal operation and an exception is thrown. Fixes 1GDKK3R
                SWT.error(SWT.ERROR_INVALID_ARGUMENT);
            }
        }
        setCaretOffset(offset, PREVIOUS_OFFSET_TRAILING);
        // clear the selection if the caret is moved.
        // don't notify listeners about the selection change.
        if (blockSelection) {
            clearBlockSelection(true, false);
        } else {
            clearSelection(false);
        }
    }
    setCaretLocation();
}

关于java - Eclipse IConsole 插入符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18711112/

相关文章:

java - spring工具套件休息服务不引用函数

java - 使用cn1 toolBar后无法使用Android原生的back命令

java - 解析文档时出错

android - 如何将gradle项目转换为android项目

java - (Eclipse RCP) 如何在工具栏中的菜单条目后添加快捷文本?

java - 获取设备中的内部可用存储空间

java - 在android中每周在Listview中填充数据

java - 如何从 CSV 文件中提取字符串数字并将其放入 java 中的 int 数组中?

java - 用于开发几个不相关的 util 包的层次结构

java - Android-自定义滑动刷新布局