Ideia colorir codigo java

Alguem ai tem alguma ideia de como ir lendo um arquivo .java e ir colorindo o codigo. usando Graphics

Antonio não entendi muito bem seu problema, mas se for o que estou pensado cria um arrayList com todas as palavras reservadas do java, dai você vai lendo as strings do seu arquivo .java e as que forem palavras resevadas você coloca de uma cor e as que não forem de outra cor.

1 curtida

to tentando fazer um editor com sintax higlighting em j2me. pra poder ir editando ums codigos no celular.
to aqui pensando num algoritimo. isso que vc falou é uma boa ideia. vlw

consegui:


import java.util.Vector;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;

public class EditCanvas extends Canvas {

    private String texto;
    private String[] keywords = {"abstract", "continue", "for", "new", "switch", "assert", "default", "if", "package", "synchronized", "boolean", "do", "goto", "private", "this", "break", "double", "implements", "protected", "throw", "byte", "else", "import", "public", "throws", "case", "enum", "instanceof", "return", "transient", "catch", "extends", "int", "short", "try", "char", "final", "interface", "static", "void", "class", "finally", "long", "strictfp", " volatile", "const", " float", "native", "super", "while"};
    private Vector iniciosPalavraChave;
    private Vector finsPalavraChave;
    private Vector iniciosString;
    private Vector finsString;

    public EditCanvas(String texto) {
        this.texto = texto;
    }

    public void atualizaIndices() {
        iniciosPalavraChave = new Vector();
        finsPalavraChave = new Vector();
        iniciosString = new Vector();
        finsString = new Vector();

        //Indices keywords
        String k;
        int idx;
        int endidx = 0;

        for (int i = 0; i < keywords.length; i++) {
            k = keywords[i];
            idx = 0;

            System.out.println("Keyword: " + k);

            while (true) {
                idx = texto.indexOf(k, endidx);

                if (idx == -1) {
                    System.out.println("Nao encontrou");
                    break;
                }

                endidx = (idx + k.length()) - 1;

                System.out.println("Primeira letra em: " + idx + " " + texto.charAt(idx));
                System.out.println("Ultima letra em: " + endidx + " " + texto.charAt(endidx));

                iniciosPalavraChave.addElement("" + idx);
                finsPalavraChave.addElement("" + endidx);
            }
        }


        //Literais string
        endidx = 0;


        while (true) {
            idx = texto.indexOf('"', endidx+1);

            if (idx == -1) {
                break;
            }
            
            iniciosString.addElement("" + idx);

            endidx = texto.indexOf('"', idx+1);

            finsString.addElement("" + endidx);
        }

    }

    protected void paint(Graphics g) {
        int linha = 0;

        Font fonte = g.getFont();
        int height = fonte.getHeight();

        int corPalavraChave = 0x0000FF;
        int corStringLiteral = 0xFF8000;
        int corTexto = 0x000000;

        int idx;

        int x = 0;
        char nextChar;

        //Limpar a tela
        g.setColor(0xffffff);
        g.fillRect(0, 0, getWidth(), getHeight());

        for (int i = 0; i < texto.length(); i++) {
            if ((idx = iniciosPalavraChave.indexOf("" + i)) != -1) {
                g.setColor(corPalavraChave);

                int endidx = Integer.parseInt((String) finsPalavraChave.elementAt(idx));

                while (i <= endidx) {
                    nextChar = texto.charAt(i);
                    g.drawChar(nextChar, x, linha * height, 0);
                    x += fonte.charWidth(nextChar);
                    i++;
                }
                continue;
            }

            if ((idx = iniciosString.indexOf("" + i)) != -1) {
                g.setColor(corStringLiteral);

                int iFim = Integer.parseInt((String) finsString.elementAt(idx));

                while (i <= iFim) {
                    nextChar = texto.charAt(i);
                    g.drawChar(nextChar, x, linha * height, 0);
                    x += fonte.charWidth(nextChar);
                    i++;
                }
                continue;
            }

            nextChar = texto.charAt(i);

            if (nextChar == '\n' || nextChar == '\r') {
                linha++;
                continue;
            }

            g.setColor(corTexto);

            g.drawChar(nextChar, x, linha * height, 0);
            x += fonte.charWidth(nextChar);
        }
    }
}

sera que é eficiente ?