当前位置: 首页 > 知识库问答 >
问题:

JTextPane附加空行

轩辕远
2023-03-14

我有一个JTextPane,我用以下方法设置它的文本。

public void setConfigPaneText(String content, Style style)
{
    StyledDocument logDoc = configPane.getStyledDocument();

    if(style == null)
    {
        style = configPane.addStyle("Style", null);
        StyleConstants.setForeground(style, Color.white);
        StyleConstants.setBold(style, true);
    }

    try 
    {
        configPane.setText(null);
        logDoc.insertString(logDoc.getLength(), content, style);
    }
    catch (BadLocationException e1)
    {
        e1.printStackTrace();
    }
}

我构建的内容字符串如下所示:

            if(f.exists())
            {
                Scanner scan = new Scanner(f);
                while(scan.hasNextLine()) 
                {
                    strbld.append(scan.nextLine()+"\n");
                }                   
                TopologyMain.nodes.get(i).setPtpConfig(strbld.toString()); // output
                scan.close();
            }

所以我让这个字符串正确地出现在JTextPane中,问题是当我将JTextPane的内容保存到一个txt文件并重新加载到JTextPane中时,每行后面都会出现一个新的空行。

图片如下:http://postimg.org/image/76z69oe7x/

代码正在保存...

    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileChooser.getSelectedFile().getAbsolutePath())));
    out.print(configPane.getText());
    out.close()

并加载:

if(filetmp.exists()) 
{
    Scanner scan;
    try 
    {
        scan = new Scanner(filetmp);

        while(scan.hasNextLine()) 
        {
            strbld.append(scan.nextLine()+"\n");
        }                   

        setConfigPaneText(strbld.toString(), null);

        scan.close();
    } 
    catch (FileNotFoundException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
 }

如果此方法中没有/n,则如下所示:http://postimg.org/image/kn38ja8ov/

问题的原因可能是我在行尾有一个额外的“\r”字符,如下所示:http://postimg.org/image/9ny41rz3z/.但我不知道他们从哪里来。

谢谢你的时间!

共有3个答案

姚善
2023-03-14

Gavi在评论中提出的解决方案:

问题的原因是我有多个CR("\r")字符,正如这里所看到的。您可以检查输出txt文件与记事本的显示所有字符功能,找出自己。然后检查与JTextPane或您用作内容的字符串相关的所有代码部分,以找到附加的CR并删除它们。

严誉
2023-03-14

在加载函数中,您不应该为每个扫描的行添加换行符,请尝试以下方式:

while(scan.hasNextLine()) 
{
  strbld.append(scan.nextLine());
} 
纪晨
2023-03-14

这里的问题是您添加了两次“\n”。一次是在构建内容字符串时,一次是在加载文件时。如果删除加载函数中的“\n”,您应该会看到文本,而不会看到额外的空行。

 类似资料:
  • 问题内容: 我可以解析JTextPane的内容,而不会遇到HTML中的任何问题: 这导致 你好! 但是每当我尝试将字符串附加到textPane时,使用 (如该问题所示),我的输出是 你好! (不带空格)-跳过html格式。 如何在我的JTextPane对象上附加一个字符串,并保持添加部分的HTML格式? 问题答案: 使用例如 要么 如果要插入段落/表格或其他分支元素,则使用该方法

  • 我从girdview适配器类调用startActivityForResult事件。Gridview适配器类是由myFragment类创建的。intent extras始终返回null onActivityResult事件。你认为错误在哪里?谢了。 我的gridview适配器类; onActivityResult事件的MyFragment类

  • 我正在使用FCM进行消息推送,我正在将数据从通知发送到我正在打开的活动。 建筑通知规范: 在我的活动中,我得到了如下意图: 但问题是,每次Intent Extras在活动中为空时,我都检查了我在社区中找到的所有可能的原因,但每次响应都是相同的。 我试过下面提到的链接 Intent的额外值始终为空 Android通知PendingIntent Extras null 总是从通知意图android获取

  • 我有一个程序,它总是将相同的文件附加到GMAIL(撰写 它所做的是: 在Android 6.0之前,它一直工作良好。现在,我在尝试使用它时收到以下错误: 无法附加空文件 Astro文件共享给我同样的错误(可能是旧版本)。 但是,我安装了ES File Explorer,当我执行相同的例程并选择该文件时,我会收到一个对话框,其中显示: 将文件作为 普通Android方式(适用于彩信、Gmail等)

  • 问题内容: 在每篇文章中,“如何向JEditorPane附加字符串?”问题的答案。就像 我已经试过了: 结果,我得到了“终止时间:1000”,而没有“进程的分布:” 为什么会发生这种情况??? 问题答案: 我怀疑这是附加文本的推荐方法。这意味着每次更改某些文本时,都需要重新解析整个文档。人们之所以这样做,是因为他们不了解如何使用JEditorPane。包括我在内。 我更喜欢使用JTextPane然

  • 我有一个9x9面板,它是每个面板都有一个JLabel,所以 我试过: 但是,我发现您很可能不能将“UndoableEditListener”添加到JLabels中。(对吗?) 我看到了一些可以将“UndoableEditListener”添加到JTextPane的示例,所以我想也许我可以创建一个JTextPane窗格[9][9],并将一个textpane添加到每个JLabel(添加到JPanel中