Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia

26/7/10

Colorear codigo en Blogger + programa portable

JAN29


Despues de buscar y probar muchas opciones para colorear codigo fuente en blogger sin tener que modificar la plantilla o arriesgarse a que post anteriores que tienen codigo con las etiquetas PRE Y CODE se alteren y queden ilegibles, encontre una alternativa que parece bastante sencilla de usar, es  
Highlight, este es un programa que convierte el codigo fuente en texto con formato, soporta varios lenguajes, esta disponible para windows como linux y lo mejor, es gratis. SI quieres saber mas, visita su web http://www.andre-simon.de

¿COMO USARLO EN BLOGGER?
Paso 1: bajate el programa e instalalo o si prefieres más abajo te dejo un portable que hice.
Paso 2: Con la aplicacion abierta, en la parte superior izquierda, tienes dos pestañas FILE y CLIPBOARD.
File: Esta opcion te permite cargar un archivo que tengas en tu pc, el programa detecta automaticamente el lenguaje.
Clipboard: esta opcion te permite realizar un copy/paste directamente de tu aplicacion IDE.

Configuraciones: esta opcion se encuentra en la parte inferior izquierda
En la pestaña GENERAL, habilita las opciones Add Line Numbers (agrega numeracion a las lineas de codigo), Pad with zeroes (coloca ceros en los numeros), validate input data (valida datos de entrada).
En OUTPUT FORMAT (formato de salida) escoge HTML.

En la pestaña OUTPUT SPECIFIC busca la opcion STYLESHEETS y habilita las opciones EMBED STYLE (CSS) e Inline CSS.

Por ultimo en la pestaña FORMATTING, puedes escoger el color del theme que utilizaras, eso ya depende de los gustos de cada quien, yo me quedo con el formato de visual studio 2008.
Tambien tiene otras opciones interesantes, TAB WIDTH te permite especificar que tamaño en caracteres tendra la tecla TAB, la opcion LINE WRAPPING  especifica el numero de columnas y tambien puedes modificar el tamaño de la fuene y el tipo.


Continuemos, cuando ya tengas el codigo cargado (paso 2), con la opcion FILE, presiona COPY FILE TO CLIPBOARD, si utilizaste la opcion CLIPBOARD, presiona COPY PREVIEW TO CLIPBOARD, abre el notepad y pega ese codigo, no lo pegues directamente en blogger.
Como se ve en la imagen, el programa crea todo el codigo fuente ya formateado, solo nos interesa lo que este entre las etiquetas PRE, borra el resto.

para personalizar un poco mas nuestro codigo, añade este contendor DIV, antes y despues de las etiquetas PRE,  dependiendo de la extension de tu codigo, puedes editar el tamaño HEIGHT de acuerdo a tus necesidades.

01 <div style="overflow: auto; height: 400px; background: none repeat scroll 0% 0% rgb(255, 255, 255);">
02 aqui el codigo
03 </div>
debes tener algo como:

Ahora si, ya puedes pegar este codigo en el editor de blogger

Ejemplos
PHP


01 <?php
02 echo "Hola Mundo";
03 ?>

C#


01 namespace HelloNameSpace
02 {
03       public class HelloWorld
04       {
05             static void Main(string[] args)
06             {
07                   Console.WriteLine("Hola Mundo!");
08 
09             }
10       }
11 }



Java


01 public class HolaMundo
02 {
03     public static void main (String [ ] args)
04     {
05         System.out.println ("Hola mundo");
06      }
07 }
¿Facil no?

La web del program es http://www.andre-simon.de/index.html

También te dejo el portable por si no quieres instalar nada en tu pc, no pesa nada

EXE Portable

Enlace actualizado 18 de enero de 2013

continue reading

14/7/10

Tablas con iText

JAN29

La API de itext vista en un post anterior que nos permite crear archivos PDF desde java, cuenta con muchas otras opciones para crear estos archivos y darles formato, una de ellas, son las tablas.

Con itex podemos crear tablas sencillas y tambien tablas complejas, estas ultimas necesitas de un planeamiento previo, para que las tablas salgan como nosotros queremos y tenemos pensado.

El objeto para crear una tabla es PdfPTable, al cual podemos especificarle la cantidad de columnas que queremos. para rellenar la tabla, podemos utilizar:
mitabla.addCell("Contenido");

o para mayor control, podemos utilizarla de esta forma:

PdfPCell celda =new PdfPCell (new Paragraph("Historial de Observaciones",
                FontFactory.getFont("arial",   // fuente
                22,                            // tamaño
                Font.BOLD,                   // estilo
                BaseColor.RED)));             // color
mitabla.addCell(celda);

Itext va rellenando la tabla, celda por celda, de izquierda a derecha y de abajo a arriba, de forma secuencial. Aqui puedes encontrar mayor informacion de la API de Itext.

El Codigo:
Esta clase que se llama tablaspdf.java, contiene dos metodos, para crear archivos pdf con tablas, simples y complejas.

01 import com.itextpdf.text.BaseColor;
02 import com.itextpdf.text.Document;
03 import com.itextpdf.text.DocumentException;
04 import com.itextpdf.text.Element;
05 import com.itextpdf.text.Font;
06 import com.itextpdf.text.FontFactory;
07 import com.itextpdf.text.Paragraph;
08 import com.itextpdf.text.pdf.PdfPCell;
09 import com.itextpdf.text.pdf.PdfPTable;
10 import com.itextpdf.text.pdf.PdfWriter;
11 import java.io.File;
12 import java.io.FileNotFoundException;
13 import java.io.FileOutputStream;
14 /**
15  * @web http://jc-mouse.blogspot.com/
16  * @author Mouse
17  */
18 public class tablaspdf {
19     
20     public void tablaspdf() throws DocumentException, FileNotFoundException{         
21         // se crea instancia del documento
22         Document mipdf = new Document();
23         // se establece una instancia a un documento pdf
24         PdfWriter.getInstance(mipdf, new FileOutputStream(new File("e:/pdf/tablas.pdf")));
25         mipdf.open(); // se abre el documento
26             
27         mipdf.addTitle("Tablas con itext"); // se añade el titulo
28         mipdf.addAuthor("jc mouse"); // se añade el autor del documento
29         mipdf.addSubject("ocio"); //se añade el asunto del documento
30         mipdf.addKeywords("jc mouse"); //Se agregan palabras claves                            
31             
32         /* ahora si tablas */           
33         //mipdf.add(Tabla_Simple());
34         mipdf.add(Tabla_compleja());
35         mipdf.close(); //se cierra el PDF               
36         System.out.println("documento pdf creado");
37     }
38     
39     public PdfPTable Tabla_Simple(){    
40         //creamos la tabla con 3 columnas
41         PdfPTable mitablasimple=new PdfPTable(3);
42         //añadimos contenido a las celdas
43         mitablasimple.addCell("Enero");
44         mitablasimple.addCell("Febrero");
45         mitablasimple.addCell("Marzo");
46         mitablasimple.addCell("Abril");
47         mitablasimple.addCell("Mayo");
48         mitablasimple.addCell("Junio");
49         mitablasimple.addCell("Julio");
50         mitablasimple.addCell("Agosto");
51         mitablasimple.addCell("Septiembre");
52         mitablasimple.addCell("Octubre");
53         //retornamos la tabla
54         return mitablasimple;        
55     }
56     
57     public PdfPTable Tabla_compleja(){ 
58         //creamos una tabla con 3 columnas
59         PdfPTable mitablacompleja=new PdfPTable(3);
60         //añadimos texto con formato a la primera celda
61         PdfPCell celda =new PdfPCell (new Paragraph("Historial de Observaciones",
62                 FontFactory.getFont("arial",   // fuente
63                 22,                            // tamaño
64                 Font.BOLD,                   // estilo
65                 BaseColor.RED)));             // color
66         //unimos esta celda con otras 2
67         celda.setColspan(3);
68         //alineamos el contenido al centro
69         celda.setHorizontalAlignment(Element.ALIGN_CENTER);
70         // añadimos un espaciado
71         celda.setPadding (12.0f);
72         //colocamos un color de fondo
73         celda.setBackgroundColor(BaseColor.GRAY);
74         //se añade a la tabla
75         mitablacompleja.addCell(celda);
76         
77         //fila 2
78         celda = new PdfPCell(new Paragraph ("AUDITORIA DE SISTEMAS"));
79         celda.setColspan(2);
80         celda.setBackgroundColor(BaseColor.GREEN);
81         mitablacompleja.addCell(celda);        
82         celda = new PdfPCell(new Paragraph ("Aprobado"));        
83         celda.setBackgroundColor(BaseColor.LIGHT_GRAY);
84         mitablacompleja.addCell(celda);
85         //fila 3        
86         celda = new PdfPCell(new Paragraph ("COMPILADORES"));
87         celda.setColspan(2);
88         celda.setBackgroundColor(BaseColor.YELLOW);
89         mitablacompleja.addCell(celda);        
90         celda = new PdfPCell(new Paragraph ("Reprobado"));        
91         celda.setBackgroundColor(BaseColor.LIGHT_GRAY);
92         mitablacompleja.addCell(celda);
93         //fila 4        
94         celda = new PdfPCell(new Paragraph ("Prog. Bajo Nivel"));
95         celda.setColspan(2);
96         celda.setBackgroundColor(BaseColor.CYAN);
97         mitablacompleja.addCell(celda);        
98         celda = new PdfPCell(new Paragraph ("Eximido"));        
99         celda.setBackgroundColor(BaseColor.LIGHT_GRAY);
100         mitablacompleja.addCell(celda);
101         //fila 5
102         mitablacompleja.addCell("Conclusion");
103         celda = new PdfPCell(new Paragraph ("¡¡¡GET A LIFE!!!"));
104         celda.setHorizontalAlignment(Element.ALIGN_RIGHT);
105         celda.setColspan(2);
106         celda.setBackgroundColor(BaseColor.ORANGE);
107         mitablacompleja.addCell(celda);
108         // se retorna la tabla
109         return mitablacompleja;    
110     }
111 }


El resultado es:
Tabla Simple
Tabla con formato

continue reading

9/7/10

Problema resuelto ACM: 3n+1

JAN29

El problema dice asi:
PROBLEMA

Considerando el siguiente algoritmo

input n
print n
if n = 1 then STOP
if n is odd then  n <- 3n + 1
else n <- n/2
GOTO 2


Teniendo la entrada 22, la siguiente secuencia de números se imprimirán 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

El ciclo termina cuando se imprime 1.

Dado un numero "n" de entrada, es posible determinar el número de números impresos (incluyendo el 1). Para un "n" dado esto se llama el ciclo de longitud de "n". En el ejemplo anterior, la duración del ciclo de 22 es 16.

Para cualquier par de números de i y j que son determinar la duración del ciclo máximo entre estos rangos.

ENTRADA
La entrada consistirá en una serie de pares de números enteros i y j, un par de enteros por línea. Todos los números enteros será inferior a 1.000.000 y mayor que 0.

Usted debe procesar todos los pares de números enteros y para cada par determinar la duración del ciclo máximo sobre todos los enteros incluyendo i y j.

Usted puede asumir que ninguna operación se desborda un entero de 32 bits.

SALIDA
Para cada par de enteros i y j debe imprimir como salida i, j, y la duración del ciclo máximo de enteros entre e incluyendo i y j. Estos tres números deben ser separados por al menos un espacio con los tres números en una línea y con una línea de salida para cada línea de entrada. Los enteros i y j deben aparecer en la salida en el mismo orden en que aparecieron en la entrada y debe ser seguido por la duración del ciclo máximo (en la misma línea).

Ejemplo:

entrada
1 10
100 200
201 210
900 1000

Salida
1 10 20
100 200 125
201 210 89
900 1000 174

[Traducido por San Google] :)

SOLUCION:


public class solucion {
    
   int mayor=1;

   public solucion(int numero1, int numero2){
    //capturamos el valor original de entrada   
    int n1=numero1;
    int n2=numero2;       
    // si n1 > n2 se invierten los valores   
    if(numero1>numero2){int tmp=numero1; numero1=numero2; numero2=tmp;}
        // los numeros deben estar entre 0 y 1000000   
        if (((numero1<=1000000) && (numero1>0))&& ((numero2<=1000000)&& (numero2>0))){
            //comienza el ciclo entre n1 y n2
            for(int i=numero1; i<=numero2;i++){
                //obtenemos el numero total de ciclos para i
                int j = ciclo(i);
                //establecemos el mayor ciclo
                if(j>mayor){
                    mayor=j;
                }
            }
            //muestra la solucion en consola
            System.out.println("Solucion " + n1 + " " + n2 + " " + mayor);
        } 
        else{
            System.out.println("EL rango de datos no es valido");
        }
   }
   
   //metodo que evalua la expresion y retorna el total del ciclo
   private int ciclo(int n){
       //establecemos un contador e 1
        int count = 1;
        //System.out.print("Para [" +n+"] Serie= ");//opcional
        //comenzamos el ciclo
        while(true){            
            //System.out.print(n+" ");//opcional
            //cuando se llegue a 1 se rompe el ciclo
            if(n==1){break;}
            if(!espar(n)){
                n = (3 * n) + 1;
            }
            else{
                n = n / 2;
            }
            count++;
        }        
        //System.out.println(" ciclos: "+ count +" ");//opcional
        return count;
    }
   
    private boolean espar(int n){
        return ((n % 2) == 0);
    }
}

Implementando la clase en el main:


public class Main {
    public static void main(String[] args) {
        new solucion(1,10);
        new solucion(100,200);
        new solucion(201,210);
        new solucion(900,1000);
        
    }
}


Nota: en la clase Solucion.java, tenemos lineas de codigo marcadas como "opcional", estas lineas de codigo solo sirven para ver con mas detalle la solucion del problema, por ejemplo con esas lineas habilitadas para entrada (1,10), tenemos:


Más vale post publicado que cientos preparados.

continue reading

6/7/10

Reproductor MP3 en java con Playlist

JAN29


Como muchos me pidieron un reproductor de mp3 con un playlist, ahora dejo a consideracion de los programadores el codigo fuente completo hecho con netbeans 6.0 y la api de Java Media.

Hasta la fecha ya deje muchos tutoriales sobre como utilizar esa API, asi que no veo la razon de redundar sobre lo mismo, por ese motivo en esta ocasion solamente dejare el codigo fuente para que sea examinado por ustedes, claro esta el codigo esta extra comentado y lo mas simple posible, y si siguen los tutos que hice creo que no habra donde perderse, ademas de que examinar el codigo fuente y ver como funciona  es una buena practica de INGENIERIA INVERSA que todo programador debe conocer.

Este reproductor tiene la capacidad de abrir archivos mp3 y cargarlos en un playlist para poder reproducirlos uno por uno, ademas tiene implementados los controles Preview y Next para poder pasar de una cancion a otra  con un simple clic, las canciones pueden ser reproducidas desde el boton PLAY o haciendo doble clic en el archivo seleccionado en el playlist. 

Dicho esto no queda mas que dejar un video de como quedo el reproductor
La interfaz que se ve es gracias al skin de Substance, esta libreria junto a las demas librerias de JMF estan en el RAR, asi que no queda mas que decir sino que a bajarselo y estudiarlo.
Click para descargar
Enlaces vivitos y coleando ;)

continue reading

29/6/10

Guardar/Cargar configuración en una aplicacion

JAN29

Muchas veces cuando hacemos un programa y queremos que las modificaciones que realizamos en nuestra aplicacion a modo de personalización en tiempo de ejecucion , como colores, tipo de letra, tamaño de la letra, color de la letra, etc, queremos que estas se guarden para no tener que realizar los mismos cambios una y otra vez.
Maneras de realizar esto creo que hay muchas, la mas sencilla que se me ocurre es utilizar un archivo de texto donde guardar nuestros cambios y cargarlos desde ahi a la aplicacion cada vez que iniciemos el programa.

Que necesitas
  • Netbeans 6.0 o  sup
  • Un editor de texto
  • imaginacion

Proyecto
Lo que haremos sera crear una aplicacion en netbeans, el cual contara con dos interfaces, la primera, la principal, donde se colocaran los cambios que hagamos, la segunda interfaz, nos servira como un panel de configuracion, esta aplicacion, al momento de iniciar, cargara un archivo de texto donde se encontraran las configuraciones de color de los paneles (FONDO, PANEL1, PANEL2, PANEL3), y tipo, tamaño, estilo y color de fuente de letra, haciendo un total de 8 configuraciones que podremos guardar y cargar en el programa.
Si el archivo de configuracion que llamaremos "miconfiguracion.txt" no existe, el programa creara uno con una configuracion por defecto y cargara este en la aplicacion. este archivo se encuentra o se creara junto al JAR de la aplicacion, en el mismo directorio de este.

Manos a la obra

1. Nuestro proyecto se llamara "configuracion", crea este en netbeans y añade dos JFrames "Aplicacion.java" y "Configurar.java", añade una tercera clase "miconfiguracion.java".


2. Ahora diseña la interfaz para "aplicacion.java" como la imagen de abajo, recuerda los nombres en rojo son importantes, colocalos como estan:
3. Diseña la interfaz para "configurar,java", esta interfaz nos servira como un panel de configuracion donde podremos realizar nuestros cambios.

4. Si llegaste hasta aqui, ahora toca escribir el codigo que nos permita manejar nuestro archivo de configuracion "miconfiguracion.txt", este archivo de texto, esta compuesto de 8 campos separados por el caracter "/", estos 8 campos corresponden a las 8 modificaciones que podemos realizar en la aplicacion, /Color de fondo/ Color de panel 1/ Color de panel 2/ Color de Panel 3/ Tipo de fuente/ Estilo de la fuente (normal, negrilla, cursiva, cursiva negrilla)/ Color de la fuente/ Tamaño de la fuente
No necesitas crear este archivo, lo creara el mismo programa que estamos haciendo, la clase para controlar las modificaciones se llama "miconfiguracion.java", el codigo es:


package configuracion;
import java.awt.Color;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JColorChooser;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class miconfiguracion {
    //configuracion por defecto
    private String default_configuracion = "/-1118482/-1118482/-1118482/-1118482/Arial/1/-16777063/12/";
    //direccion del archivo de texto
    private String archivo_de_configuracion=System.getProperty("user.dir") + "/miconfiguracion.txt";
    //Para leer archivo de texto
    private File archivo = null;
    private FileReader fr = null;
    private BufferedReader br = null;
    // para escribir en archivo
    private FileWriter fichero = null;
    private PrintWriter pw = null;
    //almacena los valores leidos del archivo de miconfiguracion.txt
    // donde los valores del vector:
    // 0 a 3 -> son los colores de fondo, panel1, panel2 y panel3
    // 4     -> Tipo de fuente
    // 5     -> Estilo de fuente
    // 6     -> Color de fuente
    // 7     -> Tamaño de fuente
    private Vector<String> vector = new Vector<String>(10,2);
    
    public miconfiguracion() {      
        try {
            Configuracion();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(miconfiguracion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(miconfiguracion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /* abre un archivo de texto y lee el contenido  */
    private void Configuracion() throws FileNotFoundException, IOException{
        String configuracion="";//contenido del archivo         
        //el archivo se encuentra en el mismo directorio que la aplicacion         
        archivo = new File(archivo_de_configuracion);
        //si el archivo existe leemos la configuracion
        if(archivo.exists()){          
            configuracion = Leer_configuracion();
        }
        else{//sino existe lo creamos
           Guardar_Configuracion(default_configuracion);
           configuracion = Leer_configuracion();
        } 
        // el string que se retorno en "configuracion", lo separa mediante tokens y lo almacena
        // en una variable de tipo vector
        token(configuracion);
    }
    
    /* ABRE UN ARCHIVO DE TEXTO Y LEE EL CONENIDO EL CUAL RETORNA EN UN STRING */
    private String  Leer_configuracion() throws FileNotFoundException, IOException{
     String tmp_c="";
     fr = new FileReader(archivo);
     br = new BufferedReader(fr);
     // Lectura del fichero de texto
     String linea = null;
     while ((linea = br.readLine()) != null) {
         tmp_c = tmp_c + linea;
     }   
     fr.close();
     return tmp_c;
    }
    
    /* separa la configuracion y los añade al vector */
    private void token(String s){
     //separamos los valores leidos en tokens     
     StringTokenizer tokens = new StringTokenizer(s,"/");
     while(tokens.hasMoreTokens()){
        vector.addElement(tokens.nextToken());
     }           
    }
    
    /* MUESTRA LA VENTA DE DIALOGO [ESCOGER COLOR]*/
    public Color Escoger_Color(java.awt.event.ActionEvent evt){
        Color color = JColorChooser.showDialog(null,"Escoja un color",((JButton)evt.getSource()).getBackground());
        if(color!=null){return color;}else{return new Color(-1118482);}
    }
    
 //guarda las configuracion en el archivo de texto "miconfiguracion.txt"
 public boolean Guardar_Configuracion(String t){   
     boolean ok = false;
        try {
            fichero = new FileWriter(archivo_de_configuracion);
            pw = new PrintWriter(fichero);
            pw.println(t);
            ok = true;     
            fichero.close();
        } catch (IOException ex) {
            Logger.getLogger(miconfiguracion.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ok;
  }
    
   /* DEVUELVE LOS VALORES ALMACENADOS EN EL VECTOR */ 
   /*  inicio */
   public int Color_de_Fondo(){
        return Integer.valueOf(vector.get(0).toString());
    }
    
    public int Color_Panel1(){
        return Integer.valueOf(vector.get(1).toString());
    }
    
    public int Color_Panel2(){
        return Integer.valueOf(vector.get(2).toString());
    }
    
    public int Color_Panel3(){
        return Integer.valueOf(vector.get(3).toString());
    }
    
    public String Tipo_Fuente(){
        return vector.get(4).toString();
    }  
    
    public int Tipo_Estilo_Fuente(){
        return Integer.valueOf(vector.get(5).toString());
    }  
    
    public int Color_Fuente(){
        return Integer.valueOf(vector.get(6).toString());
    }
    
    public int Size_Fuente(){
        return Integer.valueOf(vector.get(7).toString());
    }
    /*  fin */
}

Un poco largo el codigo, pero es sencillo, consiste, en metodos para leer el archivo de texto, si no existe lo crea, despues utilizar el StringTokenizer para separar las configuraciones y cargarlos en un vector, para que estas esten disponibles en cualquier momento. Asi mismo el metodo Guardar_Configuracion(String t), recibe un string con la cadena que formaremos con las modificaciones hechas para salvar en el archivo de texto.

5. En la clase interfaz aplicacion.java, añade el siguiente codigo:


public void inicializar(){
        /* CONFIGURACION*/
        miconfiguracion mc = new miconfiguracion();
        //se carga la configuracion en los objetos
        this.setBackground(new Color(mc.Color_de_Fondo()));
        FONDO.setBackground(new Color(mc.Color_de_Fondo()));
        PANEL1.setBackground(new Color(mc.Color_Panel1()));
        PANEL2.setBackground(new Color(mc.Color_Panel2()));
        PANEL3.setBackground(new Color(mc.Color_Panel3()));
        Font f = new Font( mc.Tipo_Fuente(),mc.Tipo_Estilo_Fuente(),mc.Size_Fuente() );
        TEXTO.setFont(f);
        TEXTO.setForeground(new Color(mc.Color_Fuente()));
        /* -- */
    }
despues añade este en el constructor de la clase, para terminar, escribe en el evento de smConfigurar el siguiente codigo:

private void smConfigurarActionPerformed(java.awt.event.ActionEvent evt) {
    configurar c = new configurar();
    c.show();
}


6. Para terminar la aplicacion, en la clase interfaz configurar.java, declara


 private miconfiguracion mc = new miconfiguracion();
 private ButtonGroup buttongroup = new ButtonGroup();
 private int OpcionSel;

Despues añade en el constructor de la clase:


 public configurar() {
        initComponents();
        this.setLocationRelativeTo(null);  
        this.setTitle("Opciones de configuración...");
        buttongroup.add(opcion1);
        buttongroup.add(opcion2);
        buttongroup.add(opcion3);
        buttongroup.add(opcion4);
        
        /* carga la configuracion en los objetos*/
        //carga los colores en los jbutton
        cmd0.setBackground(new Color(mc.Color_de_Fondo()));
        cmd1.setBackground(new Color(mc.Color_Panel1()));
        cmd2.setBackground(new Color(mc.Color_Panel2()));
        cmd3.setBackground(new Color(mc.Color_Panel3()));
        //carga el tipo de letra
        for(int i=0;i<=cboTipo.getItemCount()-1;i++){
            if(mc.Tipo_Fuente().equals(cboTipo.getItemAt(i).toString())){
                cboTipo.setSelectedIndex(i);break;
            }
        }
        //carga el tamaño de la fuente
        for(int i=0;i<=cboSize.getItemCount()-1;i++){
            if(mc.Size_Fuente()==Integer.valueOf(cboSize.getItemAt(i).toString())){
                cboSize.setSelectedIndex(i);break;
            }
        }
        //carga el estilo en el JRadioButton correspondiente
        if(mc.Tipo_Estilo_Fuente()==0){opcion1.setSelected(true);}
        if(mc.Tipo_Estilo_Fuente()==1){opcion2.setSelected(true);}
        if(mc.Tipo_Estilo_Fuente()==2){opcion3.setSelected(true);}
        if(mc.Tipo_Estilo_Fuente()==3){opcion4.setSelected(true);}
        //carga el color de fondo
        cmdFuente.setBackground(new Color(mc.Color_Fuente()));
        /* fin configurar */
    }

Ahora el el JButton: cmdCambios, escribe el siguiente codigo:


private void cmdCambiosActionPerformed(java.awt.event.ActionEvent evt) {       
  /* SE GUARDA LA NUEVA CONFIGURACION */
  //color fondo/color panel1/color panel2/color panel3/Tipo fuente/estilo fuente/color fuente/tamaño fuente
  if(
     mc.Guardar_Configuracion("/"+cmd0.getBackground().getRGB()+"/"+
                                  cmd1.getBackground().getRGB()+"/"+
                                  cmd2.getBackground().getRGB()+"/"+
                                  cmd3.getBackground().getRGB()+"/"+
                                  cboTipo.getSelectedItem().toString()+"/"+
                                  OpcionSel+"/"+
                                  cmdFuente.getBackground().getRGB()+"/"+
                                  cboSize.getSelectedItem().toString()+"/"
                               ))
    {
        JOptionPane.showMessageDialog(this,"La nueva configuracion se guardo correctamente \nLos cambios se veran la proxima ves que inicie la aplicacion...");
     }        
}

finalmente, debes añadir los eventos en los objetos que declaramos mas arriba, este codigo no lo copies y pegues, sino fijate bien, donde debe ir cada instruccion


private void cmd3ActionPerformed(java.awt.event.ActionEvent evt) {
        cmd3.setBackground(mc.Escoger_Color(evt));
}

private void cmd2ActionPerformed(java.awt.event.ActionEvent evt) {
        cmd2.setBackground(mc.Escoger_Color(evt));
}

private void cmd1ActionPerformed(java.awt.event.ActionEvent evt) {
        cmd1.setBackground(mc.Escoger_Color(evt));
}

private void cmdFuenteActionPerformed(java.awt.event.ActionEvent evt) {
        cmdFuente.setBackground(mc.Escoger_Color(evt));
}

private void opcion1ActionPerformed(java.awt.event.ActionEvent evt) {
        OpcionSel =0;
}

private void opcion2ActionPerformed(java.awt.event.ActionEvent evt) {
        OpcionSel =1;
}

private void opcion3ActionPerformed(java.awt.event.ActionEvent evt) {
        OpcionSel =2;
}

private void opcion4ActionPerformed(java.awt.event.ActionEvent evt) {
        OpcionSel =3;
}

private void cmd0ActionPerformed(java.awt.event.ActionEvent evt) {
        cmd0.setBackground(mc.Escoger_Color(evt));  
}

ejecuta el proyecto, si no tienes ningun error debes tener algo como esto

Finalmente el codigo fuente para los mas vagos :)
Click para descargar

continue reading

6/6/10

jCalendar - Fechas conJava

JAN29


jCalendar es una libreria OpenSource que te permite manejar fechas en un entorno grafico. Esta libreria dispone de varias herramientas que facilitan el trabajo con la menor cantidad de codigo escrito por nosotros.

La web oficial del proyecto es http://www.toedter.com/en/jcalendar/index.html, se encuentra en la version 1.3.3 con solo 600kb de tamaño

Para instalar nuevas librerias en netbeans, leete este "tutorial Añadir/Instalar nuevas librerias en netbeans", una ves que tenemos instalado las librerias, debemos añadir las herramientas de jCalendar a la interfaz grafica de Netbeans, para esto sigue los sieguientes pasos:

1. Situate en la barra de herramientas Palette y realiza un clic derecho sobre esta, se despliega un menu y entonces escoge la opcion Palette Manager
2. En la ventana que aparece "Palette Manager", clic en el boton New Category... , te aparece otra pequeña ventanita "New Palette Category" y colocas nombre a la nueva paleta, en este caso jCalendar. y le dices OK

3. Esto te creara una nueva categoria en Palette, seleccionala y presiona el boton Add from JAR..., entonces busca donde instalaste la libreria JAR y seleciona el archivo jCalendar-1.3.3 y le dices NEXT
4.  Despues tienes que seleccionar todos los componentes, como se ve en la imagen y le dices NEXT, te volvera a preguntar donde quieres añadir estos nuevos objetos, entonces seleccionas nuestra paleta que creamos en el paso 2 y para terminar le dices FINISH.

5. Si seguiste todos los pasos, te debe aparecer una nueva paletta en la barra de herramientas Palette
Ya tenemos instalado y configurado nuestro componente jCalendar

Proyecto de prueba.

1. crea un nuevo proyecto en netbeans y añade un jFrame, despues a la interfaz añade el componente jDateChooser como se ve en la imagen
2. para personalizar un poco la fecha de jDateChooser, ingresa a sus propiedades (clic derecho -> properties) y busca la opcion dateFormatString, es ahi donde puedes colocar el formato de salida, por ejemplo yyyy/MM/dd.
3. Ejecuta la aplicacion

Eso es todo, ya podemos seleccionar una fecha graficamente con jCalendar sin escribir una sola linea de codigo.

Puedes encontrar mas informacion (en ingles) asi como ejemplo, en esta direccion http://flib.sourceforge.net/JCalendar/doc/tutorial.html


“Una imagen vale mil palabras”, pero consume mil veces mas memoria.

continue reading

3/6/10

Notepad+- con java

JAN29

En este feriado de corpus christi que ya se acaba, aprenderemos a crear un sencillo notepad al estilo de mouse, tendra  funciones basicas (abrir/guardar) y la capacidad de trabajar con varios documentos a la vez, a traves de pestañas como se ve en la imagen.

Se necesita:
  • Java
  • Netbeans 6.0
  • 15 minutos de su tiempo
Proyecto
El proyecto comprende:

Comencemos:

1. Cree un nuevo proyecto "texto" en netbeas, añada un JFrame: textoform.java y añade un menu (JMenubar) y sus respectivos Items, ademas añada un contendor JPanel y dentro de el un JTabbedPane:JTP, debe tener algo como esto:

OJO: Fijese en los nombres de los objetos y coloquelos como en la imagen

2. crea una nueva clase textoclass.java, esta clase nos permitira manipular archivos de texto (abrir/guardar) mediante una comoca ventana de dialogo (JFileChooser), el codigo que debes colocar dentro es el siguiente:


package texto;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class textoclass {    
//para leer
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
//para escribir
FileWriter fichero = null;
PrintWriter pw = null;
//ruta absoluta del archivo a manipular
String ruta = "";
//filtro
private static FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo TXT","txt","TXT");

    public textoclass(){
    } 
    
    //abre un archivo de texto y lee el contenido linea por linea
    private String OpenFile(String ruta){
        String t="";//contenido del archivo
        try {         
            archivo = new File (ruta);
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            // Lectura del fichero linea por linea
            String linea;
            while((linea=br.readLine())!=null)
                t = t + linea + "\n";
        }
      catch(Exception e){
         e.printStackTrace();
      }finally{         
         try{
            if( null != fr ){
               fr.close();
            }
         }catch (Exception e2){ 
            e2.printStackTrace();
         }
      }
        return t;
    }
    
    private void SaveFile(String t, String ruta){
    //se separa el texto cada salto de linea
    StringTokenizer st = new StringTokenizer(t,"\n");
    try
        {
            fichero = new FileWriter(ruta);
            pw = new PrintWriter(fichero);
            //se guarda linea por linea en el archivo
            while(st.hasMoreTokens()){
                String line = st.nextToken();
                pw.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           if (null != fichero)
              fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }       
    }
    
    //segun la opcion muestra en pantalla una ventana de dialogo
    //para "abrir" o "guardar" un archivo
    public String  Dialog(String Opcion, JTextArea tArea){
        String nombre_archivo="";
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileFilter(filter);
        //ventana para "abrir un archivo", retorna FALSE si se abre
        if (Opcion.equals("Open")){
                int result = fileChooser.showOpenDialog(null);  
                if ( result == JFileChooser.APPROVE_OPTION ){
                    ruta = fileChooser.getSelectedFile().getAbsolutePath(); 
                    nombre_archivo = fileChooser.getSelectedFile().getName();
                    tArea.setText(OpenFile(ruta));
                }
        }
        //ventana para guardar un archivo
        else if (Opcion.equals("Save As")){                
                int result = fileChooser.showSaveDialog(null);
                if ( result == JFileChooser.APPROVE_OPTION ){
                    ruta = fileChooser.getSelectedFile().getAbsolutePath();
                    ruta = ruta + ".txt";
                    nombre_archivo = fileChooser.getSelectedFile().getName();
                    SaveFile(tArea.getText() ,ruta);
                    JOptionPane.showMessageDialog(null,"archivo guardado correctamente.");
                }
        }
        //aqui no muestra ninguna ventana, guarda automaticamente el archivo
        //respecto a un archivo previamente abierto
        else if(Opcion.equals("Save")){
            SaveFile(tArea.getText() ,ruta);
            JOptionPane.showMessageDialog(null,"archivo actualizado.");
        }       
        return nombre_archivo;
    }
}

3. ahora cree una nueva clase JTabbedPane_op.java, esta clase es la encargada de crear nuevas pestañas TABS en el JTabbedPane, asi como su respectivo jTextArea, asi mismo esta clase hace uso de la clase file.java que crearemos mas tarde, esta clase JTabbedPane_op, utiliza vectores para controlar y almacenar las diferenntes pestañas que se crearan, el codigo es:

package texto;
import java.util.Vector;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class JTabbedPane_op {    
//vector para almacenar objetos jtextarea
private Vector vjta = new Vector(10,2);    
//vector para almacenar objetos tipo file
private Vector vfile = new Vector(10,2);
//objetos
JTextArea jta; 
JScrollPane scrollPane;
     
public JTabbedPane_op(){}
    
//crea un nuevo TAB en el JTabbedPane junto a un textarea
public void nuevo(JTabbedPane jtp){
    //se crea una nueva instancia de jTextArea
    jta  = new JTextArea(8,25);
    //se crean las barras de desplazamiento y se añade el jtextarea
    scrollPane = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    //se añade el objeto jtextarea al vector
    vjta.add(jta);            
    vfile.add(new file());        
    //se optiene la cantidad de tabs que existen
    int i = jtp.getComponentCount();        
    jta.setText("http://jc-mouse.blogspot.com/");
    //se añade los objetos al tabs        
    jtp.add(scrollPane, i);         
    jtp.setTitleAt(i, "nuevo documento");
}
    //obtiene los datos de un jtextarea del tabs actual
public String getdatos(JTabbedPane jtp){
    int i = jtp.getSelectedIndex();
    JTextArea t = (JTextArea) vjta.elementAt(i);
    return t.getText();
}
    //retorna un jtextarea del TABS actual
public  JTextArea getjTextArea(JTabbedPane jtp){
   int i = jtp.getSelectedIndex();
   JTextArea t = (JTextArea) vjta.elementAt(i);
   return t;
}
    //elimina un TABS junto a los demas objetos que le pertenecen
public void eliminar(JTabbedPane jtp){        
    int i = jtp.getSelectedIndex();
    jtp.remove(i);
    vjta.remove(i);
    vfile.remove(i);
}
    //retorna un boolean (true|false) si el contenido de una jtextarea ya 
    //fue guardado
public boolean fileisnew(JTabbedPane jtp){      
    file f = (file) vfile.elementAt(jtp.getSelectedIndex());
    return f.isnew;
}
    //cambia el estado isnew=false despues de que el archivo a sido
    //guardado por primera vez
public void guardado(JTabbedPane jtp, String t){
    file f = (file) vfile.elementAt(jtp.getSelectedIndex());  
    jtp.setTitleAt(jtp.getSelectedIndex(), t);  
    f.isnew=false;
 }  
}

4. por ultimo cree una nueva clase file.java, esta pequeña clase nos ayuda con la gestion de los archivos


package texto;
public class file {
boolean isnew=true;//condicion boolean
String ruta = "";//ruta del archivo
    public file(){}    
}

5. para terminar, tenemos que implementar las clases en la interfaz, esto no lo copies y pegues, sino observa la forma de inplementacion:


/* se crean los objetos */
textoclass tc = new textoclass();
JTabbedPane_op op = new JTabbedPane_op();    
String title = "Notepad+- by Mouse - file:["; 


/* esto en el initComponents */
public textoform() {
   initComponents();
   this.setTitle(title + "]");
   //crea un nuevo tabs junto a una hoja en blanco
   op.nuevo(JTP);
}

/* implementacion de las acciones del menu */
private void smOpenActionPerformed(java.awt.event.ActionEvent evt) {
   // Abre archivo de texto OPEN FILE
   String n = tc.Dialog("Open",op.getjTextArea(JTP));
   this.setTitle(title + tc.ruta + "]");
   op.guardado(JTP,n);
}     

private void smSaveAsActionPerformed(java.awt.event.ActionEvent evt) {
   // Guarda en un nuevo archivo   GUARDAR COMO...    
   String n = tc.Dialog("Save As",  op.getjTextArea(JTP)); 
   this.setTitle(title + tc.ruta+"]");       
   if (!n.equals("")){op.guardado(JTP,n);}
}

private void smSaveActionPerformed(java.awt.event.ActionEvent evt) {
  // Guarda modificaciones echas a un archivo 
  //si es nuevo guarda como
  if (op.fileisnew(JTP)) {
      String n = tc.Dialog("Save As", op.getjTextArea(JTP));
      this.setTitle(title + tc.ruta + "]");
      if (!n.equals("")){op.guardado(JTP,n);}
   }
   else
   { //sino actualiza el archivo abierto
      String n = tc.Dialog("Save", op.getjTextArea(JTP));   
      this.setTitle(title + tc.ruta+"]");
   }        
}

private void smNewActionPerformed(java.awt.event.ActionEvent evt) {
   //crea un nuevo tabs junto a una hoja en blanco
   op.nuevo(JTP);
}     

private void smClosetabActionPerformed(java.awt.event.ActionEvent evt) {
   //elimina un tabs
   op.eliminar(JTP);
}

Ya tenemos nuestro notepad+- en java
Como siempre los codigos estan extracomentados y tambien te dejo el codigo fuente, cualquier duda  o bugs que se encuentre, preguntar y avisar
Click para descargar

Mi software nunca tiene fallos. Simplemente desarrolla caracteristicas aleatorias

continue reading

Post recomendado