Ayuda para un editor de textos en Java

Tengo problemas al pintar una palabra recervada en un JTextPane

Lo que hago es:

String palabraR = "Hola";
int longitud = palabraR.length();
int iniciall = editor.getText().indexOf(palabraR);
int finall = inicial + palabraR.length();

    editor.setText(editor.getText().substring(0, inciall)+"<font color='green'>"+editor.getText().substring(inciall, finall)+"</font> "+editor.getText().substring(finall, editor.getText().length()));

Pero solo pinta la primera coincidencia, y quisiera que me ayuden a que pinten todas las coincidencias

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: pintar una palabra 'recervada'

 

Tal vez quieras utilizar javax.swing.JEditorPane:

public static void main(String[] args) {
    String txt = "¡Hola!, ¿cómo estás? ¡Hola!, ¿qué hay?";
    txt = txt.replaceAll("(Hola)", "<b>$1</b>");
    JOptionPane.showMessageDialog(null, new JEditorPane("text/html", txt));
}

img

~~~

Cheveres!!

No es lo que buscaba esxactamente pero me servirá de mucho amigo. Gracias!!!

Pues hazlo para todas las

Pues hazlo para todas las ocurrencias, en tu código dices:

- Toma la primera ocurrencia de la palabra
- Mide su longitud
- Reemplaza desde donde empieza hasta donde acaba con este texto <font> etc. etc.

Para que lo haga con el resto ponlo en un bucle ( for / white )

Hay una versión del método indexOf que recibe como parametro desde donde empezar para que busques después de donde ya cambiaste el texto

Algo como:

String text = editor.getText();
String word = "hola";
int last = 0;
String ftb = "<font color='green'>";
String fte = "</font>";
int end = 0;

for ( int i = text.indexOf(word) ; i != -1 ; i = text.indexOf(word, i) ) {
    end = i+word.length();
    text = text.substring( last, i ) +ftb+ text.substring( i, end) + fte +text.substring(end);
    last = end;
}

editor.setText(text);

Así en la siguiente vuelta estás buscando a partir de en fin de la palabra anterior.

http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#indexOf-i...

font color='green'

 

¡Ah! En ese caso:

public static void main(String[] args) {
    String txt = "¡Hola!, ¿cómo estás? ¡Hola!, ¿qué hay?";
    txt = txt.replaceAll("(Hola)", "<font color='green'>$1</font>");
    JOptionPane.showMessageDialog(null, new JEditorPane("text/html", txt));
}

img

~~~

Oscar cool.

Es eso mismo lo que buscaba buscaba. Muchas gracias. Estoy con un proyecto de algo parecido a un lenguaje Resuelve operaciones matematicas basicas y algunas complejas. Pero tambien me cuesta eso del analizador sintactico, haber si aprobechan y me dan una mano en eso tbien