Во всех версиях Java до 6 поведение по умолчанию для JTextPane, помещенного внутри JScrollPane, было следующим: по возможности переносить строки на границах слов. Если нет, то все равно заверните их.
В JDK 7 поведение по умолчанию выглядит следующим образом: по возможности переносить строки по границам слова. Если нет, просто увеличьте ширину JTextPane (никогда не переносите длинные слова).
Это легко воспроизвести, вот SSCCE:
public class WrappingTest extends JFrame
{
public static void main ( String[] args )
{
new WrappingTest();
}
public WrappingTest ()
{
setSize(200,200);
getContentPane().setLayout(new BorderLayout());
JTextPane jtp = new JTextPane();
JScrollPane jsp = new JScrollPane(jtp);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
getContentPane().add(jsp,BorderLayout.CENTER);
setVisible(true);
}
}
Просто запустите его в JDK 6 и в JDK 7, напишите несколько маленьких слов и напишите длинное слово, и вы увидите разницу.
Мой вопрос прост ... новое поведение по умолчанию в JDK 7 полностью портит мою программу (в Oracle следует быть более осторожными с изменением таких значений по умолчанию ... они кажутся несущественными, но когда вы используете JTextPane для отображения данных, которые обычно содержат очень длинные строки букв, они не так уж и важны - на самом деле я собираюсь отправить отчет об ошибке, но я хотел бы найти обходной путь, пока / если они не решат его ).Есть ли способ вернуться к предыдущему поведению?
Обратите внимание, что я проверил ответ на связанный вопрос Как в JTextPane реализован перенос слов и как заставить его обернуть строку без пробелов? , но он не отвечает на этот вопрос - он предоставляет способ обернуть JTextPane вообще без учета пробелов, но для меня желаемое поведение - это разделение строк на пробелы, если это возможно, и в другом месте, если это невозможно (как в предыдущем Версии Java).