2009-01-20 1 views
1

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

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

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

ответ

1

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

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

1

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

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

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

Я хочу сделать ярлыки интерактивными, чтобы они могли вести себя как гиперссылки. Могу ли я сделать это с помощью TextArea? (Я не хочу использовать JEditorPane с HTML.) – Kaarel

+0

Любая причина против JEditorPane (мне просто интересно)? – basszero

+0

Казалось, что он медленный, и перебор. Также я не мог понять, как сохранить объект Java с каждой гиперссылкой на странице, чтобы щелчок по ссылке выполнял какое-то действие на основе объекта. – Kaarel

0

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

Laying Out Components Within a Container статья от The Java Tutorials будет предоставлять общую информацию о том, как Компоновка Менеджеры работают в Java, и в частности, Creating a Custom Layout Manager предоставит информацию о том, как сделать заказ Layout Manager, чтобы применить к Container.

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

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

Например, есть класс постоянной Component в пользовательском Layout Manager, такие как (гипотетическом) 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.

1

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

    } 
} 
+0

В соответствии с гиперссылками вы можете использовать это с помощью прослушивателя мыши. Вы можете получить, где объект был нажат, и использовать карту для выполнения действия. Но, читая ваши комментарии к бассеровому ответу, я думаю, что вы просто не чувствуете, как программировать его. – OscarRyz

+0

Да, мне не нравится реализация карты, которая отображает строки в объекты. Я могу использовать JXHyperlink (из SwingX) для хранения объекта «в ссылку» и выполнить действие, выполняемое над объектом при щелчке ссылки. Проблема заключается только в том, как расположить ссылки так, чтобы они были обернуты в прокручиваемую панель. – Kaarel