JTextPane дополнительные пустые строки
У меня есть 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 в текстовый файл и перезагружаю его в 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 ответа
Решение от Gavi в комментариях:
Причиной проблемы было то, что у меня было несколько CR ("\r"
) символов, как это можно увидеть здесь. Вы можете проверить выходной текстовый файл с помощью функции "Показать все символы" в notepad++, чтобы выяснить это самостоятельно. Затем проверьте все части кода, относящиеся к JTextPane или к строке, которую вы используете в качестве содержимого, чтобы найти дополнительные CR и удалить их.
Проблема в том, что вы добавляете "\n" дважды. Один раз, когда вы строите содержимое строки, и один раз, где вы загружаете файл. Если вы удалите "\n" в своей функции загрузки, вы должны увидеть текст без дополнительной пустой строки.
В вашей функции загрузки вы не должны добавлять новую строку для каждой отсканированной строки, попробуйте это:
while(scan.hasNextLine())
{
strbld.append(scan.nextLine());
}