【问题标题】:How can I fix this problem in JEditorPane如何在 JEditorPane 中解决此问题
【发布时间】:2019-10-26 08:27:20
【问题描述】:

我尝试在 JEditorPane 的文本中添加一些 HTML/CSS。在这个类中,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);

    }

【问题讨论】:

    标签: java swing jeditorpane


    【解决方案1】:

    您的输入文本是HTML/CSS。请注意,HTML 中的换行符是 &lt;br /&gt;,而不是 System.lineSeparator(),并且您在新的 HTML 代码中使用 \n,它们可能与 System.lineSeparator() 相同。
    异常原因:
    - 第一次调用makeLineHighlight,通过bufferText+="&lt;li style=\"background-color: #EA2A40\"&gt;\n "+linesOfText[i+1]+"\n&lt;/li&gt;\n";这行代码,增加文本行数。其中(新行)是&lt;li style="background-color: #EA2A40"&gt;
    - 第二次调用makeLineHighlight,你的新HTML格式错误。喜欢这个:

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

    因此,一个可能的解决方案是使用&lt;br /&gt; 而不是System.lineSeparator(),另一个是避免在您的新HTML 代码中使用\n

    注意&lt;br /&gt; 也写作&lt;br/&gt;&lt;br&gt;...

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2015-08-04
      • 2021-06-13
      • 2021-10-21
      • 1970-01-01
      相关资源
      最近更新 更多