JTextPane + JScrollPane +自动换行?

时间:2014-12-12 20:18:53

标签: java swing jscrollpane jtextpane word-wrap

基于现有的解决方案,我还没有找到一种方法让JTextPane(或JEditorPane)在JScrollPane中包含自动换行或强制换行。 JTextArea不是解决方案,因为我需要在特定输入中显示HTML。

output = new JTextPane();
scrollPane.setViewportView(output);
contentPane.add(scrollPane, gbc_scrollPane);
output.setEditorKit(new WrapEditorKit());
output.setForeground(Color.WHITE);
output.setFont(new Font("Courier New", Font.PLAIN, 12));
output.setEditable(false);
output.setContentType("text/html; charset=UTF-8");
output.setBackground(Color.DARK_GRAY);

WrapEditorKit是可用的here。我也尝试过ScrollablePanel,但每次JTextPane的文本都没有被包装。如何只在垂直滚动(以及水平字或强制换行)的JScrollPane中实现JTextPane?

2 个答案:

答案 0 :(得分:1)

显然是由<pre>标签引起的,而不是任何其他设置。没有<pre>标签,文本似乎正确包装。我最初添加它们是为了防止换行的另一个问题,但我会尝试使用其他方法修复它。对于一些更高级的HTML技能,这可能永远不会发生。

答案 1 :(得分:0)

大约6年后,我遇到了同样的问题。我的不是由

标签引起的-文本中没有它们。

解决方案:
子类JEditorPane或(JTextPaneJEditorPane的子类)并覆盖boolean javax.swing.Scrollable#getScrollableTracksViewportWidth()
从此方法返回true会强制Scrollable(例如JTextPane)包装其内容,而不是在包围JScrollPane的情况下不激活水平滚动。

根据文档,它们应该与所有Scrollable一起工作: DefaultTreeCellEditor.DefaultTextField,JEditorPane,JFormattedTextField,JLayer,JList,JPasswordField,JTable,JTextArea,JTextComponent,JTextField,JTextPane,JTree