Область текста No Wrap также предоставляет альтернативное решение, которое не требует переноса 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);
};
}