Unlike JTextArea
, JTextPane
has no option to turn line wrapping off. I found one solution to turning off line wrapping in JTextPane
s, but it seems too verbose for such a simple problem. Is there a better way to do this?
See No Wrap Text Pane. Here's the code included from the link.
JTextPane textPane = new JTextPane();
JPanel noWrapPanel = new JPanel( new BorderLayout() );
noWrapPanel.add( textPane );
JScrollPane scrollPane = new JScrollPane( noWrapPanel );
JScrollPane.setViewportView(Component)
when you call the constructor. Using JScrollPane.add(Component)
doesn't do what you expect it to. –
Sumac new JScrollPane(panel)
in my IDE so I didn't see anything wrong with the code. Sorry for wasting your time. –
Sumac The No Wrap Text Pane also provides an alternative solution that doesn't require wrapping the JTextPane
in a JPanel
, instead it overrides getScrollableTracksViewportWidth()
. I prefer that solution, but it didn't quite work for me - I noticed that wrapping still occurs if the viewport becomes narrower than the minimum width of the JTextPane
.
I found that JEditorPane
is overriding getPreferredSize()
to try and 'fix' things when the viewport is too narrow by returning the minimum width instead of the preferred width. This can be resolved by overriding getPreferredSize()
again to say 'no, really - we always want the actual preferred size':
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);
};
}
© 2022 - 2024 — McMap. All rights reserved.
JTextPane
in aJPanel
did was disable the vertical scrollbar. – Sumac