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/
jueves, 24 de marzo de 2011
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.
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.
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...
Como diría Apache: It Works!
Ahora "sólo" toca maquearlo...
miércoles, 9 de marzo de 2011
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...
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...
miércoles, 2 de marzo de 2011
Tiembla bloc de notas
Pues en este proyecto... sobretodo me he encontrado con lo porculero que es el entorno para que las cosas salgan en su sitio... me recuerda a las librerías fltk de C++ que vimos en Entornos de Usuario (y que no echo nada de menos).
Posiblemente sea por lo sencillo que puede resultar en entornos .NET (o similares) agregar un botón a un formulario donde queremos con el GUI que estamos todos acostumbrados a ver. Cuando investigue mas con Jigloo opinaré más a fondo :P
De momento... que tiemble el bloc de notas!!!!
Posiblemente sea por lo sencillo que puede resultar en entornos .NET (o similares) agregar un botón a un formulario donde queremos con el GUI que estamos todos acostumbrados a ver. Cuando investigue mas con Jigloo opinaré más a fondo :P
De momento... que tiemble el bloc de notas!!!!
Highlight
No, no es la nueva de Crepúsculo.
Se refiere a una propiedad que tiene el componente JTextPane con el cual podemos definir coloreado a nuestro texto.
¿Para qué sirve eso? para, por ejemplo, que en entornos tipo Eclipse, cuando ponemos una palabra reservada nos la marque en otro colorcito.
En cuanto tenga un poco más de soltura con el entorno (sobretodo con Swing) y tiempo (para cuando los días de 30 horas?) me dedicaré a portar mi "proyecto" de editor PHP que hice hace un tiempo en Gambas, Joa ( http://www.al081570.es/joa )
Se refiere a una propiedad que tiene el componente JTextPane con el cual podemos definir coloreado a nuestro texto.
¿Para qué sirve eso? para, por ejemplo, que en entornos tipo Eclipse, cuando ponemos una palabra reservada nos la marque en otro colorcito.
En cuanto tenga un poco más de soltura con el entorno (sobretodo con Swing) y tiempo (para cuando los días de 30 horas?) me dedicaré a portar mi "proyecto" de editor PHP que hice hace un tiempo en Gambas, Joa ( http://www.al081570.es/joa )
martes, 1 de marzo de 2011
Coordenadas de pantalla
Me acabo de encontrar con una pequeña peculiaridad con el evento MouseEvent.
Resulta que el método getX() devuelve las coordenadas en las que se encuentra el ratón, pero siempre relativas al componente sobre el que le estemos llamando. ¿Qué quiere decir esto? pues que si estamos trabajando sobre el método getX() de un JFrame, no devolverá las mismas coordenadas que el método getX() de un JPanel.
En la aplicación real del asunto, me he topado con esto al intentar hacer el ejercicio de dibujar los circulitos por la pantalla al presionar, ya que estaba cogiendo las coordenadas del JFrame y salía el circulito desplazado en la pantalla.
Viva Google :)
Resulta que el método getX() devuelve las coordenadas en las que se encuentra el ratón, pero siempre relativas al componente sobre el que le estemos llamando. ¿Qué quiere decir esto? pues que si estamos trabajando sobre el método getX() de un JFrame, no devolverá las mismas coordenadas que el método getX() de un JPanel.
En la aplicación real del asunto, me he topado con esto al intentar hacer el ejercicio de dibujar los circulitos por la pantalla al presionar, ya que estaba cogiendo las coordenadas del JFrame y salía el circulito desplazado en la pantalla.
Viva Google :)
Suscribirse a:
Comentarios (Atom)