domingo, 20 de mayo de 2012

Buscar y Colorear palabras en java



Al momento de desarrollaraplicacionestipo editor de texto o que manejen texto,debemos de implementar el proceso debúsquedade palabras con un efecto de distinguir de lasdemáspor ejemplo: colorear las palabras encontradas,pero como hacemos esto posible,con la claseStyleContext.


¿Pero que es StyleContext?

Es un grupo de estilos con recursos asociados.Esta clase determina la vida de un grupo de recursos al ser un contenedor que almacena los caches para los diversos recursos, tales como tipo de letra y color que se reutilizan en las definiciones de estilo diferentes.Esto puede ser compartida por varios documentos, si se desea maximizar la distribución de los recursos relacionados.
Esta clase también proporciona apoyo eficiente para pequeños conjuntos de atributos y las comprime mediante el intercambio a través de usos y el aprovechamiento de su naturaleza inmutable.

Una vez entendido ,vamos a utilizar otra clase llamadaDefaultSyledDocument, para poder tener acceso al documento que contiene el texto.

¿Que esDefaultSyledDocument?
Es un documento que puede ser marcado con el carácter y los estilos de párrafo de una manera similar al formato de texto enriquecido.La estructura de los elementos de este documento representa los cruces de estilo de carreras de estilo.Estas carreras de estilo se asignan en una estructura de elemento de párrafo (que pueden residir en alguna otra estructura).El estilo va romper en los límites de párrafo, ya que los estilos lógicos se asignan a los límites de párrafo.

Fragmento delcódigoque realiza labúsqueday el color


  String palabra = buscar_palabra.getText();
if (palabra.length() 0) {
try {

// estilo por defecto
Style defaultStyle = stilo.getStyle(StyleContext.DEFAULT_STYLE);
final Style mainStyle = stilo.addStyle("MainStyle", defaultStyle);
StyleConstants.setFontFamily(mainStyle, "serif");
StyleConstants.setFontSize(mainStyle, 12);

// Estilo letra reservada
Style estilo = stilo.addStyle("EstiloLetra", null);
StyleConstants.setForeground(estilo, Color.ORANGE);
StyleConstants.setFontSize(estilo, 16);
StyleConstants.setFontFamily(estilo, "serif");
StyleConstants.setBold(estilo, true);
StyleConstants.setLeftIndent(estilo, 8);
StyleConstants.setFirstLineIndent(estilo, 0);

Pattern p = Pattern.compile(palabra, Pattern.CASE_INSENSITIVE);
String editor = docu.getText(0, docu.getLength());
Matcher matcher = p.matcher(editor);
docu.setCharacterAttributes(0, docu.getLength(), mainStyle, false);
//realiza la busqueda o similitudes de la palabra asignada
while (matcher.find()) {
docu.setCharacterAttributes(matcher.start(), matcher.end(), estilo, false);
docu.setCharacterAttributes(matcher.end(), docu.getLength(), mainStyle, true);
}
} catch (Exception r) {
System.out.println("ERROR EN EL TEXTO: " + r);
System.exit(1);
}

}

Si lo imaginas,lo programas


1 comentario: