Java SWT StyledText GetCareTofset给出错误的行号

Java SWT StyledText GetCareTofset给出错误的行号,java,swt,styledtext,Java,Swt,Styledtext,我试图使活动线的项目符号具有突出显示的背景。我正在使用 int activeLine = styledText.getLineAtOffset(styledText.getCaretOffset()); 获取当前处于活动状态的类。这似乎是有效的,除了当我按下回车键,得到一个新的行。 GetCareTofset返回35,getCharCount返回36 但是,如果我单击最后一行(现在我在单击时调用redraw()),该行将正确高亮显示,getCareTofset返回36 这是相关代码 pub

我试图使活动线的项目符号具有突出显示的背景。我正在使用

int activeLine = styledText.getLineAtOffset(styledText.getCaretOffset());
获取当前处于活动状态的类。这似乎是有效的,除了当我按下回车键,得到一个新的行。

GetCareTofset返回35,getCharCount返回36

但是,如果我单击最后一行(现在我在单击时调用redraw()),该行将正确高亮显示,getCareTofset返回36

这是相关代码

public void lineGetStyle(LineStyleEvent event) {
    // Set the line number
    int activeLine = styledText.getLineAtOffset(styledText.getCaretOffset());
    System.out.println("Offset " + styledText.getCaretOffset() + " max " + styledText.getCharCount());
    int currentLine = styledText.getLineAtOffset(event.lineOffset);
    event.bulletIndex = currentLine;

    // Set the style, 12 pixles wide for each digit
    StyleRange style = new StyleRange();
    style.metrics = new GlyphMetrics(0, 0, 36);

    if (activeLine == currentLine) {
        style.background = highlightedLine;
        if (curActiveLine != activeLine){
            System.out.println("ActiveLine " + activeLine + " old " + curActiveLine);
            int redrawLine = curActiveLine;
            curActiveLine = activeLine;
            styledText.redraw(0, styledText.getLinePixel(redrawLine), 36, styledText.getLineHeight(),true);
        }
    }

    style.foreground = mainBackground;


    // Create and set the bullet
    event.bullet = new Bullet(ST.BULLET_NUMBER, style);

    event.styles = matchKeywords(event);
}

我刚刚意识到,您可以设置CaretListener来获取插入符号每次移动的通知。通过发布重画,现在效果很好