Панель с переносом строк и переносом строк в Java Swing - PullRequest
1 голос
/ 20 января 2009

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

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

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

Ответы [ 4 ]

1 голос
/ 22 января 2009

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

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

1 голос
/ 20 января 2009

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

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

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

Вот код:

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

    }
}
1 голос
/ 20 января 2009

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

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

JTextArea textArea = new JTextArea();
JScrollPanel sPane = new JScrollPane(textArea);
0 голосов
/ 20 января 2009

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

Компоновка компонентов внутри контейнера статья от Учебные руководства по Java предоставят общую информацию о том, как работают менеджеры по расположению в Java, и, в частности, Создание пользовательских Диспетчер макетов предоставит информацию о том, как настроить собственный диспетчер макетов для применения к Container.

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

Предложение: Возможно, пользовательский менеджер компоновки может иметь возможность добавить разрыв строки, имея Component, представляющий разрыв строки, который можно добавить к Container с помощью add() метод.

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

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

Приведенный выше гипотетический LineBreakLayout будет отображать первый Label в одной строке, а второй Label во второй строке.

...