Панель с переносом строк и переносом строк в Java Swing
-
19-08-2019 - |
Вопрос
Как реализовать панель, которая будет поддерживать перенос и перенос строк? Я бы добавил к этой панели только текстовые метки и разрывы строк. Метки должны перетекать слева направо, переходя к следующему & 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"));
Приведенная выше гипотетическая <=> отобразит первую <=> в одну строку, а вторую <=> во второй.