Как я могу исправить эту проблему в JEditorPane - PullRequest
0 голосов
/ 12 июня 2019

Я пытался добавить HTML / CSS в текст JEditorPane.Также метод setText() переопределен в этом классе.

Когда я вставляю более 14 строк в панель, затем запускаю makeLineHighlight() или дважды makeLineHighlight() для текста панели, некоторые строки удаляютсяили я получил некоторые исключения.Когда текст панели изменяется (я проверяю его в цикле), я использую переопределенный setText(), чтобы создать числовой список на панели.

При удалении super.setText() код работает правильно.

 @Override
    public void setText(String text) {

        String bufferText = "<ol style=\"margin-left: 20px;" +
                "font-family: Courier New, Courier, monospace;\"  >";

        String[] linesBuffer = text.split(System.lineSeparator());
        for (int i = 0; i < linesBuffer.length; i++) {

            bufferText += "<li style=\"\">" + linesBuffer[i] + "</li>" + System.lineSeparator();

        }
        bufferText += "</ol>";
        int pos=this.getCaretPosition();
        super.setText(bufferText);

        if(pos>getDocument().getLength())pos=getDocument().getLength();
        try {
            setCaretPosition(pos + 1);
        }catch (IllegalArgumentException e){
            setCaretPosition(pos);
        }
        lastText = this.getText();

    }

    public void makeLineHighlight(int lineNumber){
        String bufferText="";

        String[] linesOfText=super.getText().split(System.lineSeparator());
        for (int i = 0; i < linesOfText.length; i++) {
            if(i==(6+((lineNumber-1)*3))){
                bufferText+="<li style=\"background-color: #EA2A40\">\n "+linesOfText[i+1]+"\n</li>\n";
                i+=2;
                continue;
            }
            bufferText+=linesOfText[i]+System.lineSeparator();

        }

        super.setText(bufferText);

    }

1 Ответ

0 голосов
/ 12 июня 2019

Ваш введенный текст HTML/CSS.Обратите внимание, что разрыв строки в HTML равен <br />, а не System.lineSeparator(), и вы используете \n в своем новом HTML-коде, который может быть таким же, как System.lineSeparator().
Исключение из-за:
-При первом вызове makeLineHighlight по этой строке кода bufferText+="<li style=\"background-color: #EA2A40\">\n "+linesOfText[i+1]+"\n</li>\n"; номер строки текста увеличивается.Один из них (новые строки) - <li style="background-color: #EA2A40">
- при втором вызове makeLineHighlight ваш новый HTML-код имеет неправильный формат.Нравится это:

<li style="background-color: #EA2A40">
<li style="background-color: #EA2A40">
</li>

Итак, возможное решение - использовать <br /> вместо System.lineSeparator(), а другое - избегать использования \n в вашем новом HTML-коде.

Будьте в курсечто <br /> также записывается как <br/> или <br> ...

...