【问题标题】:JTextPane additional empty linesJTextPane 附加空行
【发布时间】:2014-08-19 08:23:41
【问题描述】:

我有一个 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/。但我不知道它们来自哪里。

感谢您的宝贵时间!

【问题讨论】:

    标签: java string swing jtextpane styleddocument


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    在你的加载函数中,你不应该为每个扫描的行添加一个换行符,试试这个:

    while(scan.hasNextLine()) 
    {
      strbld.append(scan.nextLine());
    } 
    

    【讨论】:

    • 没有它,根本就没有换行。
    • 然后我假设保存的文本文件的换行符有问题。尝试使用 notepad++ 的显示所有字符功能对其进行检查。无论如何,可以像这样添加换行符:stackoverflow.com/questions/14534767/…
    • 我的意思是 strbld.append(System.getProperty("line.separator"));
    • 是的,我明白了。这种添加换行符的方法具有相同的结果。但是notepadd++的想法很有用,原来我多了一个CR字符。 postimg.org/image/9ny41rz3z 现在的问题是:为什么?我的加载和保存方法都没有“\r”。
    • 这可能是 Windows 的一个功能。 Afaik windows 在内部使用 \r\n 换行。
    【解决方案3】:

    来自 cmets 中 Gavi 的解决方案:

    问题的原因是我有多个 CR ("\r") 字符,可以看到 here。您可以使用 notepad++ 的显示所有字符功能检查输出的 txt 文件以自行查找。然后检查与 JTextPane 或用作内容的字符串相关的所有代码部分,以查找其他 CR 并删除它们。

    【讨论】:

      猜你喜欢
      • 2013-07-20
      • 2011-05-02
      • 1970-01-01
      • 2019-10-25
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多