JEditorPane - Mostrando linhas em cores diferentes

0 respostas
J

Bolei um componente baseado num JEditorPane que exibe avisos num painel do meu servidor.
Este componente exibe três tipos de aviso: TAREFA_INICIADA, TAREFA_FINALIZADA_COM_SUCESSO, TAREFA_FINALIZADA_SEM_SUCESSO…Essas mensagens são exibidas, respectivamente, nas cores preto, azul e vermelho…

Segue o protótipo do componente:

import java.awt.Color;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import java.awt.BorderLayout;

public class ExibeAvisos extends JEditorPane 
{

	private static final long serialVersionUID = 1L;
	
	private static String COR_PRETA = "#000000";
	private static String COR_AZUL = "#0000FF";
	private static String COR_VERMELHA = "#FF0000";

	public ExibeAvisos() 
	{
		setContentType("text/html");
		setBackground(new Color(255,255,255));
	}
	
	
	public void append(TipoDeAviso tipoDeAviso, String aviso) 
	{
		String horario = new SimpleDateFormat("dd'/'MM'/'yy' 'HH':'mm':'ss").format(new Date());
                
                String prefixo = "";
                String cor = "";
                
                switch(tipoDeAviso)
                {
                    case TAREFA_INICIADA: aviso = "<b>"+aviso+"</b>";
                                          prefixo="&#8226  ";
                                          cor = COR_PRETA;
                                          break;
                                          
                    case TAREFA_FINALIZADA_COM_SUCESSO: prefixo="+  ";
                                                        cor = COR_AZUL;
                                                        break;
                    
                    case TAREFA_FINALIZADA_SEM_SUCESSO: prefixo="-  ";
                                                        cor = COR_VERMELHA;
                }

		this.setText(getText().replaceAll("<html>", ""));
		this.setText(getText().replaceAll("<head>", ""));
		this.setText(getText().replaceAll("</head>", ""));
		this.setText(getText().replaceAll("<body>", ""));
		this.setText(getText().replaceAll("</body>", ""));
		this.setText(getText().replaceAll("</html>", ""));

		this.setText("<html><head></head><body><strong><font size=\"3\" face=\"Verdana, Arial, Helvetica, sans-serif\" color=\""+ cor +"\"> " + prefixo + " " + aviso + " - [" + horario + "]</font></strong><br>" + getText()+"</body></html>");
                this.setCaretPosition(0);
        }
	
	public static void main(String[] s)
	{
		JFrame janela = new JFrame();
		
		ExibeAvisos jepe = new ExibeAvisos();
		
		janela.setLayout(new BorderLayout());
		janela.add(jepe);
		
		janela.setSize(200,200);
		
		try
		{
			jepe.append(TipoDeAviso.TAREFA_INICIADA, "Iniciando tarefa");
                        jepe.append(TipoDeAviso.TAREFA_FINALIZADA_SEM_SUCESSO, "Tarefa finalizada sem sucesso");
			jepe.append(TipoDeAviso.TAREFA_FINALIZADA_COM_SUCESSO, "Tarefa finalizada com sucesso");
		}
		catch(Exception ex){ex.printStackTrace();}
		
		janela.setVisible(true);
	}
}

A questão é que só consegi fazer as mensagens serem exibidas de baixo para cima…Contrariando toda a lógica de visualização com a qual o usuário está acostumado…

Alguém poderia me ajudar nisso? Tentei mudar a ordem da concatenação dos elementos (e a lógica para tanto) na linha em que gero o html, mas não consegui nenhum resultado satisfatório…A idéia seria as mensagens seguirem a lógica padrão, de cima para baixo…

Criado 6 de outubro de 2008
Respostas 0
Participantes 1