Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 Eclipse RCP编辑器-按enter键时添加文本_Java_Eclipse Rcp - Fatal编程技术网

Java Eclipse RCP编辑器-按enter键时添加文本

Java Eclipse RCP编辑器-按enter键时添加文本,java,eclipse-rcp,Java,Eclipse Rcp,我已经使用EclipseRCP创建了文本编辑器。我已经向ITextListener注册了编辑器。 要求:当用户按enter键时,在因enter键生成的新行上添加六位数字 我已在侦听器中捕获了enter键事件。 我准备好了六位数的号码。 我只想把这个数字加到正在生成的新行中 请在下面找到我的代码 私有类VPTextListener实现ITextListener{ @Override public void textChanged(TextEvent event) {

我已经使用EclipseRCP创建了文本编辑器。我已经向ITextListener注册了编辑器。 要求:当用户按enter键时,在因enter键生成的新行上添加六位数字

我已在侦听器中捕获了enter键事件。 我准备好了六位数的号码。 我只想把这个数字加到正在生成的新行中

请在下面找到我的代码 私有类VPTextListener实现ITextListener{

    @Override
    public void textChanged(TextEvent event) {

        if(null!=event && null!=event.getDocumentEvent()){

            String text = event.getDocumentEvent().fText;
            if(text.equals(AGConstants.LINE_SEPARATOR)){
                int offset = event.getDocumentEvent().fOffset;
                try {
                    int offsetLine = event.getDocumentEvent().fDocument.getLineOfOffset(offset);
                    int lineLength = event.getDocumentEvent().fDocument.getLineLength(offsetLine);
                    int offsetOfLine = event.getDocumentEvent().fDocument.getLineOffset(offsetLine);
                    String line = event.getDocumentEvent().fDocument.get(offsetOfLine, lineLength);
                    if(!ModelUtil.isEmpty(line) && line.length()>=6){
                        String seqNum = line.substring(0, 6);
                        int iSeqNum = ModelUtil.makeNullZero(seqNum);
                        if(0==iSeqNum){
                            return;
                        }
                        String newSeqNum = ModelUtil.make6(iSeqNum+1);

                        event.getDocumentEvent().fDocument.replace(offset+2, newSeqNum.length(), newSeqNum);
                    }
                } catch (BadLocationException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
但在执行之后,它给出了BadLocationException

请帮我做这个。 提前感谢

请看一下。大致如下:

public class NewLineAutoEditStrategy implements IAutoEditStrategy {

    public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
        if (command.length == 0 && command.text != null) {
            // is not a replace

            if (TextUtilities.equals(document.getLegalLineDelimiters(), command.text) != -1) {
                // text being insterted is a legal line delimiter

                command.text += getMagicNumber();
            }
        }
    }

}

您还可以检查插入符号的位置(如果在行尾)或者,如果用户同时按下Shift和Return按钮。在这种情况下,您可能希望禁用命令自定义。

文档中的“偏移量+2”是否有效?如果您希望插入文本而不是替换现有文本,
replace
的第二个参数应为0。实际上,当按下enter键时,我希望插入文本user.event.getDocumentEvent().fDocument.replace(偏移量,0,文本)…它正在插入文本,但稍后的行为很奇怪。按箭头键后文本正在更改。感谢您的建议。它对我有效。我已创建了您提到的类。然后我已在编辑器的SourceViewerConfiguration中注册了它。:-)