无法在JEditorPane中添加多行

时间:2014-10-31 19:09:26

标签: java text jeditorpane

我使用JEditorPane来显示一些文字。问题是我无法添加多行。

我的代码现在

public class Window extends JFrame {
private JEditorPane text = new JEditorPane();

public Window() {
    setLayout(new BorderLayout());
    setTitle("test");
    setSize(500, 350);
    setResizable(false);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setLocationRelativeTo(null);
    text.setEditable(false);
    text.setContentType("text/html");

    text.setText("<b>Some bold text</b><br>");
    text.setText(text.getText() + "<br>Some text that is not bold but here <b>it is</b>");

    getContentPane().add(text, BorderLayout.CENTER);
    setVisible(true);
}

}

当它在同一行时没有问题,<br>创建一个新行。但是,如果是多个陈述,我就无法让它发挥作用。

它需要在多个语句中,因为稍后每个语句都将成为if条件。

如何让它做多行?

1 个答案:

答案 0 :(得分:1)

问题是JEditorPane将文本包装在<html><body> ... </body></html>个元素中。例如,执行以下操作时:

text.setText("<b>Some bold text</b><br>");
System.out.println("text content:\n" + text.getText());

你得到这个输出:

text content:
<html>
  <head>

  </head>
  <body>
    <b>Some bold text</b><br>
  </body>
</html>

因此,您需要在包装之前存储先前的文本,或者在</body>

之前插入addtional内容

例如,在一个非常简单的实现中,您可以将以下属性和方法添加到您的类中:

private StringBuilder sb = new StringBuilder();

public String appendText(String text) {
  return sb.append(text).toString();
}

然后,您可以更改以前的语句以将文本设置为:

...
text.setText(appendText("<b>Some bold text</b><br>"));
text.setText(appendText("<br>Some text that is not bold but here <b>it is</b>"));
...

会产生所需的行为:

enter image description here