2011-08-12 24 views
5

Jak dokładnie zaimplementowano zawijanie słów w JTextPane?W jaki sposób zaimplementowane jest zawijanie słów w JTextPane i jak mogę go zawinąć ciąg bez spacji?

Próbuję dokładnie zrozumieć, jak to działa, dzięki czemu mogę zmodyfikować zachowanie. Teraz, jeśli mam standardowy JTextPane wewnątrz JScrollPane, będzie on łamał tekst w przestrzeniach, ale nie w długich słowach - jeśli istnieje ciąg tekstu bez spacji, który jest szerszy niż okno, nie będzie on zawijany/łamany i pojawi się poziomy pasek przewijania. Wraz ze wzrostem szerokości tekstu szerokość ParagraphView (za pomocą getWidth()) zwiększa się, aby pomieścić tekst.

This article by Lapitsky mówi, że LabelView.getBreakWeight() zwraca View.ExcellentBreakWeight dla etykiet ze spacjami i View.GoodBreakWeight dla etykiet bez spacji (a kod w GlyphView.java wydaje się to potwierdzać), dlaczego więc nie pęka? Czy w jakiś sposób wraca BadBreakWeight zamiast GoodBreakWeight? Czy jest jakiś problem z układem? Czy jest jakiś błąd?

Oto niektóre kodu (do oglądania):

//somewhere inside JPanel or JFrame constructor 
JTextPane textPane = new JTextPane(); 
JScrollPane scrollPane = new JScrollPane(textPane); 
add(scrollPane); 

Należy pamiętać, że jeszcze nie zawijać jeśli wyjąć panel przewijania i po prostu korzystać z okienka tekstowego (tylko staje obcięty jak to idzie za oknem).


W Javadocs dla Swing nie wydają się wchodzić wystarczająco szczegółowo, w jaki sposób niektóre obiekty (takie jak JTextPane, widok, a powiązanymi obiektami) współpracować. Czy istnieje jakakolwiek dokumentacja dotycząca projektowania takich zajęć, być może opisująca cel każdej klasy i sposób, w jaki wszystkie one pracują razem? Czy to nie jest publicznie dostępne? (Czy tylko ja mam problem z takimi rzeczami?) Czy jest to niewystarczająca dokumentacja ograniczona do rzeczy, które nie powinny być obsługiwane przez typowego programistę?)

Odpowiedz

4

Łącze dotyczące niestandardowego zawijania (wymuszonego zawijania i bez okładu). http://java-sl.com/wrap.html

Łącze o literę owinąć http://java-sl.com/tip_html_letter_wrap.html

+1

podanym przykładzie działa, ale podziały wiersza są ignorowane! Wypróbuj drugi link z małym dopasowaniem: 'htmlTextPane.setText (" firstLine
secondLine
thirdLine
'. To będzie obsługiwać zawijanie listów, ale linie'
'są ignorowane. Nie mogłem tego rozwiązać , nawet przez wymieszanie fragmentu kodu z odpowiednimi oryginalnymi metodami, które można znaleźć [tutaj] (http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/6-b14/javax/ swing/text/html/HTMLEditorKit.java /? v = source) i [here] (http://developer.classpath.org/doc/javax/swing/text/View-source.html). – Blauhirn

+0

Drugie łącze było naprawdę to, co chciałem ... dziękuję za opublikowanie! – Panayotis

Powiązane problemy