JTextPane перенос строки - PullRequest
       1

JTextPane перенос строки

8 голосов
/ 23 августа 2011

В отличие от JTextArea, JTextPane не имеет возможности отключить перенос строки. Я нашел одно решение для отключения переноса строки через JTextPane s, но оно кажется слишком многословным для такой простой проблемы. Есть ли лучший способ сделать это?

Ответы [ 2 ]

11 голосов
/ 23 августа 2011

См. Нет текстовой панели переноса . Вот код, включенный по ссылке.

JTextPane textPane = new JTextPane();
JPanel noWrapPanel = new JPanel( new BorderLayout() );
noWrapPanel.add( textPane );
JScrollPane scrollPane = new JScrollPane( noWrapPanel );
1 голос
/ 14 декабря 2017

Область текста 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);
    };
}
...