JTextPane附加空行

时间:2014-08-19 08:23:41

标签: java string swing jtextpane styleddocument

我有一个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();
    }
}

我像这样构建内容String:

            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 个答案:

答案 0 :(得分:3)

这里的问题是您添加了两次“\ n”。在构建内容字符串之后,以及在加载文件的位置。如果删除加载函数中的“\ n”,则应该看到没有附加空行的文本。

答案 1 :(得分:0)

在您的加载功能中,您不应为每条扫描线添加换行符,请尝试以下操作:

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

答案 2 :(得分:0)

评论中来自Gavi的解决方案:

问题的原因是我有多个CR("\r")个字符,因为可以看到here。您可以使用notepad ++的show all character函数检查输出txt文件,以便自己查找。然后检查与JTextPane或您用作内容的String相关的所有代码部分,以查找其他CR并将其删除。