清除文本后在SWT中设置光标位置

时间:2018-01-16 11:40:20

标签: java swt

我正在尝试清除文本框中写入的文本,并在按下ENTER键后将光标放在文本框的开头。我能够获取文本,清除文本,但光标总是在文本框的第二行结束。

final Display display = new Display();
Shell shell = new Shell(display);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 1;
shell.setLayout(gridLayout);

final Text text1 = new Text (shell, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
text1.setLayoutData(new GridData(GridData.FILL_BOTH));

text1.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
        if(e.keyCode == SWT.CR) {
            String textData = text1.getText();
            text1.setText("");
            text1.setSelection(0);
        }
    }
});

我错过了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

问题来自这样一个事实,即在获取文本并清除框后,关键监听器正在尝试完成其工作并回答ENTER - 按键。

在这种情况下你想要做的是告诉他:"我得到了我需要的信息,你不必继续"。为此,您可以将doit的{​​{1}}标记设置为KeyEvent

false

答案 1 :(得分:0)

或者,在释放键后更改光标位置:

text1.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
        if(e.keyCode == SWT.CR) {
            String textData = text1.getText();
            text1.setText("");
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if(e.keyCode == SWT.CR) {
            text1.setSelection(0);
        }
    }
});