【问题标题】:Eclipse RCP editor - Add Text when enter is pressedEclipse RCP 编辑器 - 按下输入时添加文本
【发布时间】:2014-07-09 07:36:49
【问题描述】:

我有使用 Eclipse RCP 创建的文本编辑器。我已经用 ITextListener 注册了编辑器。 要求:当用户按下回车时,在因回车而产生的新行上加上六位数字。

我已经在监听器中捕获了回车键事件。 我已经准备好我的六位数号码了。 我只想将该数字添加到正在生成的新行中。

请在下面找到我的代码 私有类 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。

请帮助我。 提前致谢

【问题讨论】:

  • 'offset + 2' 是文档中的有效位置吗?如果要插入文本而不是替换现有文本,replace 的第二个参数应为 0。
  • 实际上我想在用户按下回车时插入文本。 event.getDocumentEvent().fDocument.replace(offset, 0, text)... 它正在插入文本,但后来的行为很奇怪。按下箭头键后,文本正在发生变化。

标签: java eclipse-rcp


【解决方案1】:

看看IAutoEditStrategy。大概是这样的:

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 按钮。在这种情况下,您可能需要禁用命令自定义。

【讨论】:

  • 感谢您的建议。它对我有用。我已经创建了您提到的课程。然后我在我的编辑器的 SourceViewerConfiguration 中注册了它。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
相关资源
最近更新 更多