JTextPane разрыв строки

1

В этом вопросе, по словам собеседника,

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);

но это вообще не изменяет никакого поведения.

Теги:
swing
line
word-wrap
wrap
jtextpane

2 ответа

1
Лучший ответ

Благодаря Гийому, я понял это, мне потребовалось три часа, чтобы понять, хотя: линию разорвать очень на самом деле работает здесь, но строка перерыв не работает, как можно видеть в нити, которые цитировались в этом вопросе.

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);
4

В вашем коде должно быть что-то еще, что мешает правильной работе.

Вот небольшой демонстрационный пример с тем же кодом, который работает просто отлично:

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);
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню