В этом вопросе, по словам собеседника,
JTextPane действительно имеет перенос слов, когда текст превышает ширину
Кажется, это не так.
scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
this.contentPane.add(scrollPane);
txtrFghj = new JTextPane();
txtrFghj.setBorder(null);
txtrFghj.setContentType("text/html");
txtrFghj.setText(content);
scrollPane.setViewportView(txtrFghj);
В данном фрагменте кода content
контента вообще не будет завершено, оно просто превышает видимый размер окна. Длинные предложения нельзя увидеть полностью, если окно недостаточно велико.
Как я могу добиться переноса строк?
Я пытался
txtrFghj.setSize(50,50);
но это вообще не изменяет никакого поведения.
Благодаря Гийому, я понял это, мне потребовалось три часа, чтобы понять, хотя: линию разорвать очень на самом деле работает здесь, но строка перерыв не работает, как можно видеть в нити, которые цитировались в этом вопросе.
JTextPane
моей JTextPane
выглядело следующим образом:
<html>
<body>
<br>
<font color="red">bla bla bla bla</font>\r\n
<u>someVeeeeeeeeeeeeeryLooooongString__WithOUTanySpacesInBetweeeeeeeeeeeeeeeeeeeeeeeeen</u>
<b>more text</b>
// ........ a lot of more HTML
Some funny SENTENCE which is longer than JTextPane.getSize().width usually allows. This sentence was NOT LINE WRAPPED which made me ask the question.
</body>
</html>
Теперь SENTENCE был бы завернут в строку, если VeeeeryLooongString не расширила ширину JTextPane. Все время я не думал о длинной строке в моем объекте TextPane и о том, как это могло повлиять на общее поведение переноса строки.
Удаление этой giga-String решило проблему для меня.
Дополнительную информацию по этой теме см. В этом подробном вопросе.
Теперь я попытаюсь включить String wrapping в JTextPanes, для которого дополнительная информация снова может быть найдена в цитируемой теме.
Редактировать.: Письмо-упаковка может быть сделано, но это, кажется, разрывы строк <br>
не работают больше времени. Для данного вопроса самым простым решением будет не отключать горизонтальную полосу прокрутки и вместо нее устанавливать AS_NEEDED
:
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
В вашем коде должно быть что-то еще, что мешает правильной работе.
Вот небольшой демонстрационный пример с тем же кодом, который работает просто отлично:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
public class TestLineWrap {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestLineWrap().initUI();
}
});
}
protected void initUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextPane editorPane = new JTextPane();
editorPane.setContentType("text/html");
editorPane
.setText("<html>Some long text that cannot hold on a single line if the screen is too small</html>");
JScrollPane scrollPane = new JScrollPane(editorPane);
scrollPane
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
frame.add(scrollPane);
frame.setSize(200, 400);
frame.setVisible(true);
}
}
txtrFghj.setPreferredSize(new Dimension(500, 50));
или такой.