与JTextArea不同,JTextPane没有关闭换行的选项。我发现了一个在JTextPane中关闭换行的solution,但对于这样一个简单的问题来说,它似乎太冗长了。有没有更好的方法来做这件事?
发布于 2011-08-23 11:53:35
参见No Wrap Text Pane。以下是链接中包含的代码。
JTextPane textPane = new JTextPane();
JPanel noWrapPanel = new JPanel( new BorderLayout() );
noWrapPanel.add( textPane );
JScrollPane scrollPane = new JScrollPane( noWrapPanel );发布于 2017-12-15 03:37:53
No Wrap Text Pane还提供了另一种解决方案,它不需要将JTextPane包装在JPanel中,而是覆盖了getScrollableTracksViewportWidth()。我更喜欢这种解决方案,但它对我来说并不是很有效--我注意到,如果视区变得比JTextPane的最小宽度窄,仍然会发生换行。
我发现当视区太窄时,JEditorPane会重写getPreferredSize(),通过返回最小宽度而不是首选宽度来尝试“修复”问题。这可以通过再次重写getPreferredSize()来解决,说“不,真的-我们总是想要实际的首选大小”:
public class NoWrapJTextPane extends JTextPane {
@Override
public boolean getScrollableTracksViewportWidth() {
// Only track viewport width when the viewport is wider than the preferred width
return getUI().getPreferredSize(this).width
<= getParent().getSize().width;
};
@Override
public Dimension getPreferredSize() {
// Avoid substituting the minimum width for the preferred width when the viewport is too narrow
return getUI().getPreferredSize(this);
};
}https://stackoverflow.com/questions/7156038
复制相似问题