Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 清除文本后在SWT中设置光标位置_Java_Swt - Fatal编程技术网

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

Java 清除文本后在SWT中设置光标位置,java,swt,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

我试图清除文本框中写入的文本,并在按下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);
        }
    }
});
我错过了什么


谢谢

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

在这种情况下,你要做的是告诉他:“我得到了我需要的信息,你不必继续。”。您可以通过将
KeyEvent
doit
标志设置为
false
来执行此操作:

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

            // HERE IS THE IMPORTANT CODE PART, NO SELECTION IS NEEDED
            e.doit = false;
        }
    }
});

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

在这种情况下,你要做的是告诉他:“我得到了我需要的信息,你不必继续。”。您可以通过将
KeyEvent
doit
标志设置为
false
来执行此操作:

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

            // HERE IS THE IMPORTANT CODE PART, NO SELECTION IS NEEDED
            e.doit = false;
        }
    }
});

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

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);
        }
    }
});

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

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);
        }
    }
});

文本框应仅为一行吗?如果是这样,不要使用SWT.MULTI。它应该是多行的。文本框应该是单行吗?如果是这样,请不要使用
SWT.MULTI
。它应该是多行的。