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

时间:2016-09-26 18:20:10

标签: 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上,它的行为正常。

2 个答案:

答案 0 :(得分:3)

我可以确认您在Windows 7上使用SWT 3.106(与Eclipse 4.6一起提供)运行代码段的观察结果。

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

停止使用Text小部件来消费键事件
event.doit = false;

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

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

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

答案 1 :(得分:2)

在Windows上,使用箭头键可以向左或向右移动插入符。

这仅适用于单行Text小部件。

所以这是预期的行为,而不是错误。