2011-08-12 13 views
5

¿Cómo se implementa el ajuste de palabras en JTextPane?¿Cómo se implementa word-wrapping en JTextPane, y cómo lo hago para envolver una cadena sin espacios?

Estoy tratando de entender exactamente cómo funciona para poder modificar el comportamiento. En este momento, si tengo un JTextPane estándar dentro de un JScrollPane, se dividirá el texto en espacios, pero no dentro de palabras largas: si hay una cadena de texto sin espacios que es más ancha que la ventana, no se ajustará ni dividirá. Aparecerá una barra de desplazamiento horizontal. A medida que aumenta el ancho del texto, el ancho de ParagraphView (a través de getWidth()) aumenta para mantener el texto.

This article by Lapitsky dice que LabelView.getBreakWeight() devuelve View.ExcellentBreakWeight para las etiquetas con espacios y View.GoodBreakWeight para las etiquetas sin espacios (y el código en GlyphView.java parece confirmar esto), entonces ¿por qué no se rompe? ¿De alguna forma está devolviendo BadBreakWeight en lugar de GoodBreakWeight? ¿O hay algún problema de diseño? O hay un error?

Aquí hay algo de código (para su placer visual):

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

Tenga en cuenta que todavía no se ajusta si tomo el panel de desplazamiento y sólo tiene que utilizar el panel de texto (sólo se recorta a medida que avanza afuera de la ventana). no parecen


Los javadocs de oscilación para entrar en detalles suficientes sobre cómo algunos objetos (como JTextPane, Ver, y objetos relacionados) trabajan juntos. ¿Hay alguna documentación adicional sobre el diseño de tales clases, tal vez detallando el propósito de cada clase y cómo funcionan todas juntas? ¿Simplemente no está disponible públicamente? (¿O soy el único que tiene problemas con este tipo de cosas? ¿O la documentación insuficiente está limitada a cosas que un desarrollador típico no espera?)

Respuesta

4

El enlace sobre envoltura personalizada (envoltura forzada y sin envoltura). http://java-sl.com/wrap.html

El enlace de la carta envolver http://java-sl.com/tip_html_letter_wrap.html

+1

el ejemplo dado funciona, pero los saltos de línea se ignoran! Pruebe el segundo enlace suyo con un pequeño ajuste: 'htmlTextPane.setText (" firstLine
secondLine
thirdLine
'. Esto admitirá el ajuste de letras, pero los saltos de línea'
'se ignoran. No he podido resolver esto , incluso mezclando el extracto del código con los métodos originales correspondientes que se pueden encontrar [aquí] (http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/6-b14/javax/ swing/text/html/HTMLEditorKit.java /? v = source) y [aquí] (http://developer.classpath.org/doc/javax/swing/text/View-source.html). – Blauhirn

+0

El segundo enlace era realmente lo que quería ... ¡gracias por publicarlo! – Panayotis

Cuestiones relacionadas