2012-02-15 24 views
9

Minęło trochę czasu, odkąd zadałem pytanie!Java JLabel, podział tekstu na następny wiersz?

Zajmuję się tworzeniem aplikacji w Javie, gdzie są używane JLabels. W każdym razie, jak możesz lub nie może zobaczyć na poniższym obrazku, tekst, który mówi: Category Test zostaje odcięty i kończy się zamiast niego: Categor.... Czy istnieje sposób, aby "złamać" tekst, gdy wypełni on szerokość etykiety? Oto zdjęcie:

enter image description here

Co zrobiłem

użyłem JTextPane tak:

JTextPane text = new JTextPane(); 
    SimpleAttributeSet attr = new SimpleAttributeSet(); 

    StyleConstants.setAlignment(attr, StyleConstants.ALIGN_CENTER); 

    pane.add(text, c); 

Potem dodałam mój tekst, ale dzięki tak!

+0

Stamtąd wydostanbym "Łańcuch Kategorii". To zupełnie niepotrzebne. Zamiast tego może mieć "Kategorie" w pojedynczym JLabelu nad twoją siatką. –

+0

Uhhh, to są zastępcze. Użytkownik zdefiniuje, co mówią kategorie. Czy kiedykolwiek widziałeś Jeopardy? –

Odpowiedz

10

JLabel s nie może tego zrobić domyślnie. Ale niektóre z nich obsługują html, więc JLabel z tekstem <html>First Line<br />Second Line</html> pojawiłoby się na dwóch liniach.

Jeśli chcesz składnik, który może podzielić linie przez siebie, przyjrzeć JTextArea.

+0

Na razie będę dawać +1, ale chcę zobaczyć, czy nie znajdę innej drogi. Dzięki. –

+0

@Ken przeszukiwał więcej, 'JLabel wyświetla tylko 1 linię, chyba że używasz html. – Jeffrey

+0

D: Cóż, zobaczę, co mogę zrobić; dzięki wielkie! –

2

Jak pamiętam, musisz użyć JTextArea, jeśli chcesz textwrap. JLabel tego nie robi.

1

Można w składniku StyledLabel od Jide Common warstwy projektu open source w http://java.net/projects/jide-oss/.

Problemem podejścia HTML JLabel jest czy nie automatyczne zawijanie i około 20 do 40 razy mniejsza niż zwykły JLabel.

Problem z JTextArea lub JTextPane podejścia jest to, że ma dziwny problem rozmiarze i jest również 20 razy wolniej.

StyledLabel rozszerza JLabel. Automatyczne zawijanie wierszy to tylko jedna z wielu funkcji, które dodaje. A wydajność jest tak szybka, jak zwykły JLabel.

Mam nadzieję, że to pomoże.