我使用eclipse RCP创建了文本编辑器。我已经使用ITextListener注册了编辑器。 要求:当用户按下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。
请帮我解决这个问题。 在此先感谢
答案 0 :(得分: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按钮。在这种情况下,您可能希望禁用命令自定义。