Java 在Windows 7 SWT 4.3上,setSelection不';不要在文本末尾移动插入符号

Java 在Windows 7 SWT 4.3上,setSelection不';不要在文本末尾移动插入符号,java,swt,Java,Swt,我在swt中有以下文本。我试图在一个文本小部件中显示一个特定的文本,并将插入符号移动到末尾,以防用户想要添加一些内容 问题是插入符号总是在最后一个字符之前,而不是在最后一个字符之后 text = new Text(group, SWT.BORDER); text.addListener(SWT.KeyDown, e -> { if (e.keyCode == SWT.ARROW_UP) { String prevText = "som

我在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上,它的行为正常。

我可以确认您在Windows7上运行SWT3.106(Eclipse 4.6附带的)代码片段时的观察结果

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

event.doit = false;
此问题仅适用于单行文本输入字段。如果使用
新文本(父级,SWT.MULTI)
创建文本,则设置所选内容将按预期工作

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

int selection=text1.getText().length()+1;
文本1.设置选择(选择,选择);
在Windows上,使用▲ 及▼ 箭头键将向左或向右移动插入符号

这只适用于单行
文本
小部件


因此,这在很大程度上是预期的行为,而不是bug。

为什么要为
SWT.KeyDown
使用
Listener
?您希望在什么时候将光标移到末尾?代码尝试在命令历史记录中导航。我保存它是为了显示设置文本是在侦听器中进行的(我认为这可能会受到线程的影响)。按向上键后,我希望文本中会出现一个新文本,并且文本中的光标位于文本的末尾。您可以尝试其他侦听器类型或不更改插入符号位置的按键事件吗
SWT.ARROW_UP
实际上会将插入符号向左移动,这将导致它位于最后一个字符之前。我知道你在这里做了什么。。。我试试看,然后告诉你。谢谢。太好了,如果这解决了你的问题,让我知道,然后我可以发布这作为一个正确的答案。