基于现有的解决方案,我还没有找到一种方法让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?
答案 0 :(得分:1)
显然是由<pre>
标签引起的,而不是任何其他设置。没有<pre>
标签,文本似乎正确包装。我最初添加它们是为了防止换行的另一个问题,但我会尝试使用其他方法修复它。对于一些更高级的HTML技能,这可能永远不会发生。
答案 1 :(得分:0)
大约6年后,我遇到了同样的问题。我的不是由
标签引起的-文本中没有它们。解决方案:
子类JEditorPane
或(JTextPane
是JEditorPane
的子类)并覆盖boolean javax.swing.Scrollable#getScrollableTracksViewportWidth()
。
从此方法返回true会强制Scrollable
(例如JTextPane
)包装其内容,而不是在包围JScrollPane
的情况下不激活水平滚动。根据文档,它们应该与所有
。Scrollable
一起工作: DefaultTreeCellEditor.DefaultTextField,JEditorPane,JFormattedTextField,JLayer,JList,JPasswordField,JTable,JTextArea,JTextComponent,JTextField,JTextPane,JTree 。