gpt4 book ai didi

java - 无法在 JEditorPane 中添加多行

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:52 24 4
gpt4 key购买 nike

我正在使用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稍后再说。

如何让它执行多行?

最佳答案

问题在于 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> 之前插入附加内容

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

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

关于java - 无法在 JEditorPane 中添加多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26681794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com