我想让JEditorPane
显示JTextArea
中的文字。使用JEditorPane
的原因是我想在特定文本模式上创建链接(使用a href
)。我调查了JTextPane
,但没有找到一种简单的方法。文本是填充的,因此填充和保留正确的空格数很重要。显示屏之间的差异如下所示:
我希望JEditorPane
以与JTextArea
(左侧)完全相同的方式显示文字。也许,还有另一种更好的方法吗?像1233
这样的文本会有链接,一旦我将文本显示正确,就会触发相关的事件监听器。
代码:
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;
public class Test {
public static void main(String[] args)throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
final static String sampleText=
"\n" +
" 1233 2001/16/07 This is test\n" +
" With padding\n" +
" more padding\n" +
" and more padding";
private static void createAndShowGUI() {
final JFrame frame = new JFrame("test");
//final JTextComponent textComponent=new JTextArea();
final JEditorPane textComponent=new JEditorPane();
textComponent.setContentType("text/html");
textComponent.setFont(textComponent.getFont().deriveFont(11.5f));// larger font
textComponent.setText(sampleText);
frame.getContentPane().add(textComponent);
frame.setPreferredSize(new Dimension(370,120));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
}
使用纯文本时,这可以是一个解决方案:
textComponent.setFont(new JTextArea().getFont().deriveFont(11.5f));
但格式化已丢失。因此,当我将contentType设置为" text / html"时,这不起作用。设置内容类型时JEditorPane
(即使使用Monospaced
字体):
答案 0 :(得分:1)
解决方案是,无论textComponent
是什么(JTextArea
还是JEditorPane
):
textComponent.setFont(new JTextArea().getFont().deriveFont(11.5f));
这会强制JEditorPane
使用与JTextArea
相同的字体。此外,将空格替换为html实体和换行符<br>
:
sampleText=sampleText.replaceAll("\n","<br>").replaceAll("\\s"," ");