Вопрос

Как реализовать панель, которая будет поддерживать перенос и перенос строк? Я бы добавил к этой панели только текстовые метки и разрывы строк. Метки должны перетекать слева направо, переходя к следующему & Quot; line & Quot; если необходимо. Разрыв строки приведет к переходу на следующую строку. Я также хотел бы сделать панель вертикально прокручиваемой.

Решение должно работать в Java 5. Можно использовать SwingX.

Уточнение: текстовые метки на самом деле являются JXHyperlink s (из SwingX), то есть панель содержит кликабельные метки. Вот почему я не могу просто использовать JTextArea.

Это было полезно?

Решение 3

Я нашел JTextPane, который я по какой-то причине пропустил раньше. Этот класс делает то, что мне нужно.

Спасибо за вашу помощь, хотя. :)

Другие советы

ОБНОВЛЕНИЕ: я пропустил запрос на поддержку гиперссылки. Не знаю, как это сделать без использования EditorPane.

JTextArea делает именно то, что вы описали.

JTextArea textArea = new JTextArea();
JScrollPanel sPane = new JScrollPane(textArea);

альтернативный текст http://img187.imageshack.us/img187/3238/wraprn0 .png

Этот образец не из панели, то есть контейнера, а из JLabel, предназначенного для отображения содержимого.

Вы можете использовать HTML в своем контенте и использовать < br > на каждом перерыве. Вы должны программно рассчитывать перерывы в соответствии с вашими правилами изменения размера компонента.

Вот код:

import javax.swing.*;
import java.awt.*;

public class Wrap {


    public static void main( String [] args ) { 

        JFrame frame = new JFrame("Wrap test");

        String text =  "<html>This<br>is<br>a<br>multiline<br>label</html>";


        frame.add( new JLabel( text ) );

        frame.pack();

        frame.setVisible( true );

    }
}

Хотя это может быть не то решение, которое вы ищете, но исходя из ваших требований, похоже, что обычай LayoutManager может достичь того, чего вы хотите. Путем разработки и назначения собственного менеджера макетов, который допускает разрывы строк для Container (например, Panel ), должна быть возможность FlowLayout, которая допускает разрывы строк.

Размещение компонентов в контейнере статья из учебного руководства по Java предоставит общую информацию о работе менеджеров по расположению в Java и, в частности, создание диспетчера пользовательских макетов предоставит информацию о том, как настроить собственный менеджер макетов для применения к Component.

Поведение add() (менеджер компоновки по умолчанию для LineBreakLayout.LINE_BREAK), похоже, довольно похож на поведение, за которым вы можете следовать. Добавление функциональности в разрыв строки выглядит как недостающий фрагмент.

Предложение . Возможно, в пользовательском менеджере макета можно добавить разрыв строки, добавив LineBreakLayout, представляющий разрыв строки, который можно добавить в Label с помощью <=> метод.

Например, имейте константу класса <=> в настраиваемом менеджере раскладки, например (гипотетически) <=>, и добавив ее в <=>, вы можете указать настраиваемому диспетчеру раскладки перейти на следующую строку. Возможно, реализация может быть такой:

Panel p = new Panel(new LineBreakLayout());
p.add(new Label("First Line"));
p.add(LineBreakLayout.LINE_BREAK);
p.add(new Label("Second Line"));

Приведенная выше гипотетическая <=> отобразит первую <=> в одну строку, а вторую <=> во второй.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top