jueves, 24 de marzo de 2011

Árboles B en Java

He encontrado esta página donde puedes descargarte un fuente... un dolor de cabeza menos, no hace falta reinventar la rueda.

http://jdbm.sourceforge.net/

miércoles, 23 de marzo de 2011

Highlight casero: fase 1

Pues ya tengo mi código de resaltado de código en fase 1!!!

Para este primer caso, únicamente buscamos una cadena "bu" la cual resaltar.

String n = evt.getKeyChar()+"";
if (n.equals(" ") || n.equals("\n"))
{
if (((s.substring(ini, txtEdicion.getCaretPosition()).trim()).equals("bu")))
{
color = sc.addStyle("ConstantWidth",null);
StyleConstants.setForeground(color, Color.red);
doc.setCharacterAttributes(ini, txtEdicion.getCaretPosition(), color, false);
}
else
{
color = sc.addStyle("ConstantWidth",null);
StyleConstants.setForeground(color, Color.black);
doc.setCharacterAttributes(ini, txtEdicion.getCaretPosition(), color, false);
}
ini = txtEdicion.getCaretPosition();
}

Buscamos carácter de inicio, carácter de final, si coincide con "bu" lo marcamos de rojo.

Esto, en la fase 2, será en lugar de una simple cadena, un array de ellas con algún tipo de datos que se ajuste a su fin... estoy pensando en árboles...

Veremos qué tal :)

EDITO: refinando el código

String s = txtEdicion.getText();
String n = evt.getKeyChar()+"";
color = sc.addStyle("ConstantWidth",null);
StyleConstants.setForeground(color, Color.black);
if (n.equals(" ") || n.equals("\n"))
{
if ((a.contains((s.substring(ini, txtEdicion.getCaretPosition()).trim()))))
{
color = sc.addStyle("ConstantWidth",null);
StyleConstants.setForeground(color, Color.blue);
doc.setCharacterAttributes(ini, txtEdicion.getCaretPosition(), color, false);
}
ini = txtEdicion.getCaretPosition();
}

De vez en cuando devuelve alguna excepción que tengo que terminar de controlar, y ahora ya está buscando en un arraylist. Es un principio.

jueves, 17 de marzo de 2011

Emoticonos: código final

Aunque puede parecer un poco raro... pero un cacho de código extraído de mi fuente para poder coger lo que se mete en un JTextPane, y teniendo un Vector de emoticonos, poder añadirlo :)


StyledDocument doc = (StyledDocument)texto.getDocument();
Style style = doc.addStyle("StyleName", null);
int i=0,j=1; // Juego de posiciones para detectar emoticonos
if (sLinea.indexOf(":")>0) // Es mensaje de conversación, está separado el nick del mensaje con :
{
String [] aux = sLinea.split(":", 2);
i=aux[1].indexOf(":",j); // Posición donde encontramos los : para ver si es emoticono
doc.insertString(doc.getLength(), aux[0]+": ",null); // El donde se dice "usuario:" para identificar el mensaje
if (aux[1].length() > 2) // Escribimos : pero nada más, no buscar si la siguiente palabra constituye emoticono
while (i>0) // mientras tengamos referencias a que se encuentran : en el mensaje
{
doc.insertString(doc.getLength(), aux[1].substring(j,i),null); // escribimos hasta llegar al punto de los :
try
{
if (ic.contains(aux[1].substring(i,i+2))) // Está la combinación : + caracter en el vector de emoticonos reconocidos
{
StyleConstants.setIcon(style, new ImageIcon(iconos +aux[1].substring(i,i+2))); // Creamos el icono
doc.insertString(doc.getLength(), "ignored text", style); // lo metemos
}
else
doc.insertString(doc.getLength(), aux[1].substring(i,i+2),null); // no contiene emoticono reconocido, escribimos tal cual
j=i+2; // incrementamos la próxima posición de lectura para buscar emoticonos
i=aux[1].indexOf(":",j); // miramos si tenemos más : en el mensaje
}
catch (StringIndexOutOfBoundsException e) // fuera de rango, forzamos a que no siga buscando y que escriba lo que le quede
{
i = 0;
}
}
doc.insertString(doc.getLength(), aux[1].substring(j)+"\n",null); // acabamos escribiendo el resto del texto
texto.setCaretPosition(texto.getDocument().getLength()); // para que el scroll vaya avanzando
}
else // Mensaje de usuario conectado/desconectado
doc.insertString(doc.getLength(), sLinea+"\n",null);

miércoles, 16 de marzo de 2011

Emoticonos en el chat

Aprovechando el componente JTextPane, y teniendo una lista de iconos disponible (esto es lo que a mi me falta) podemos incluir emoticonos en el chat.

Para ello implementamos algo así como:

int i,j = 0;
i = sLinea.indexOf(":P",j);
StyledDocument doc = (StyledDocument)texto.getDocument();
Style style = doc.addStyle("StyleName", null);
while (i > 0)
{
doc.insertString(doc.getLength(), sLinea.substring(j, i),null);
// The image must first be wrapped in a style
StyleConstants.setIcon(style, new ImageIcon("icono.jpg"));
// Insert the image at the end of the text
doc.insertString(doc.getLength(), "ignored text", style);
j = i + 2;
i = sLinea.indexOf(":P",j);
}
doc.insertString(doc.getLength(), sLinea.substring(j)+"\n",null);

Y para este caso, cuando añadimos en el mensaje :P nos añade el emoticono.

lunes, 14 de marzo de 2011

Chateando

Cuando me pregunten si estoy enganchado a Internet, diré que si, que me he pasado toda la noche chateando.

Como diría Apache: It Works!

Ahora "sólo" toca maquearlo...

miércoles, 9 de marzo de 2011

Cerrojos...

No sería más fácil contratar a un portero para que nos abra?

Hilos haciendo el trabajo sucio

Pues dentro del editor de texto usando hilos, surge la necesidad de que se llame a un hilo para que haga el trabajo sucio de tener que contar los caracteres.

Para ello, justo después que se copia el contenido del editor sobre el componente de texto, llamamos al hilo para que cuente el contenido de dicho texto.

No tiene pinta de ser nada del otro mundo, un simple cálculo y a morir (como bien dirían los Saratoga).

Utilizamos un: new Hilo().start();

Siendo Hilo una clase que extiende Threads y que está dentro de nuestra clase principal.

Todo un abanico de posibilidades...