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="• ";
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…