JTextPane + JScrollPane + 自动换行?

5

根据现有解决方案,我还没有找到一种方法使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是这里提供的一个。我也尝试过ScrollablePanel,但每次JTextPane的文本都没有被换行。如何在JScrollPane中实现一个只有垂直滚动(水平单词或强制换行)的JTextPane?


它能在普通的JPanel上工作吗? - Tabaqui
@Tabaqui:你的意思是“它能在普通的JPanel中工作吗”?原帖的问题与JPanel无关,无论是普通的还是其他。 - Hovercraft Full Of Eels
@HovercraftFullOfEels 我正在尝试弄清楚是否玩弄getPreferredScrollableViewportSize()(覆盖它)可以帮助,但我没有我的JDK在这里测试 :/ - Tabaqui
我不是JTextPane专家,但如果你正在展示HTML,使用CSS样式表是否可以帮助你换行文本?再次强调,我不知道这是否可能,甚至不知道JTextPane的HTML编辑器工具包是否支持此功能。 - Hovercraft Full Of Eels
2
使用JDK7在Windows 7上,我使用标准编辑器工具包与JTextPane的文本换行功能正常。请发布一个完整的示例,并在示例中包含简单的HTML以演示问题。也就是说,发布一个合适的SSCCE。仅几行代码无法帮助我们解决问题。 - camickr
2个回答

1
显然是由于使用了 <pre> 标签而不是其他设置导致的。没有 <pre> 标签,文本似乎可以正确换行。我最初添加了这些标签以防止出现换行符问题,但我会尝试使用其他方法来解决它。如果有更高级的 HTML 技能,就不会发生这种情况了。

1
这就是为什么你要发布你的“SSCCE”的原因。我们无法猜测你的代码或HTML看起来像什么,以导致问题的出现。 - camickr

0

6年后我遇到了同样的问题。我的问题不是由于<pre>标签引起的——文本中没有这些标签。

解决方案:
子类化JEditorPane或(JTextPaneJEditorPane的子类)并覆盖boolean javax.swing.Scrollable#getScrollableTracksViewportWidth()方法。
从该方法返回true会强制一个Scrollable(例如JTextPane)换行其内容,而不是在包含JScrollPane时激活水平滚动。

根据文档,应该适用于所有这些ScrollableDefaultTreeCellEditor.DefaultTextField、JEditorPane、JFormattedTextField、JLayer、JList、JPasswordField、JTable、JTextArea、JTextComponent、JTextField、JTextPane、JTree


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接