java - 在 Windows 7 SWT 4.3 上 setSelection 不会移动文本末尾的插入符号

标签 java swt

我在 swt 中有以下文本。我正在尝试在文本小部件中显示特定文本并将插入符号移动到末尾,以防用户想要添加某些内容。

问题在于插入符号始终位于最后一个字符之前,而不是之后

    text = new Text(group, SWT.BORDER);
    text.addListener(SWT.KeyDown, e -> {
        if (e.keyCode == SWT.ARROW_UP) {
            String prevText = "some text from history";
            text.setText(prevText);
            text.setSelection(prevText.length());
            //This doesn't work either: caret is stil before last character
            //text.setSelection(prevText.length()+10);
        }
    });

更多详细信息:

Windows7
swt-4.3
SWT-OS: win32
SWT-WS: win32
SWT-Arch: x86_64

在 OSX 上它表现正常。

最佳答案

我可以确认您在 Windows 7 上使用 SWT 3.106(随 Eclipse 4.6 附带)运行代码片段时的观察结果。

Up 键可将插入符号的位置更改为前一个字符。在 Windows 上,向上向下 键分别向左和向右更改光标位置。为了防止这种情况发生,您需要使用

停止 Text 小部件消耗按键事件
event.doit = false;

此问题仅适用于单行文本输入字段。如果使用 new Text(parent, SWT.MULTI ) 创建文本,则设置选择将按预期工作。

或者,对于单行文本输入字段,请使用重载的 setSelection(in,int)setSelection(Point) 方法。例如:

int selection = text1.getText().length() + 1;
text1.setSelection( selection, selection );

关于java - 在 Windows 7 SWT 4.3 上 setSelection 不会移动文本末尾的插入符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39709738/

相关文章:

Java无法识别已定义的变量?

java - 拖放 SWT TableColumn 标题?

java - swt 浏览器不再处理错误

eclipse - Java Eclipse SWT OSX 错误

java - 如何在测试容器上使用docker-compose.yml时解决安装问题

java - 内存泄漏——Tomcat、Spring MVC

java - 使用 Java RCP 和 SWT 打开新窗口

java - 使用 Java SWT 在透明图像上绘图

java - Log4J2 属性替换 - 使用外部属性文件

java - 从字符串中删除特定 unicode 范围的字符