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

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

3 ответа

Решение

См. Текстовую панель без переноса. Вот код, включенный по ссылке.

JTextPane textPane = new JTextPane();
JPanel noWrapPanel = new JPanel( new BorderLayout() );
noWrapPanel.add( textPane );
JScrollPane scrollPane = new JScrollPane( noWrapPanel );

Текстовая панель 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);
    };
}

Надеюсь, что это поможет http://java-sl.com/wrap.html

Другие вопросы по тегам