java - Eclipse RCP 编辑器 - 按下 Enter 键时添加文本

标签 java eclipse-rcp

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

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

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

请帮我解决这个问题。 提前致谢

最佳答案

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

关于java - Eclipse RCP 编辑器 - 按下 Enter 键时添加文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647863/

相关文章:

maven - 使用 Tycho 构建产品时出现 "Icon(s) not replaced"错误

java - 如何告诉 jackson 将 "null"字符串反序列化为空文字?

java - Java程序执行问题

java - SwingWorker doInBackground() 不起作用

java - 如何在“首选项”对话框中查找特定设置的首选项键

java - 为什么 Eclipsepedia 的 TreeViewer 需要这段代码?

Eclipse RCP如何调试目标平台?

java - 在 Equinox OSGi 包缓存中提取的类文件?

java - 在 Java 中反转数组

java - 我可以将 HashSet 存储到 Firestore 文档 (Java)