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

30/12/09

Material Avanzado para 3d: Oro (Gold)

JAN29

Una vez que tenemos el trabajo de modelado e iluminacion terminado, nos falta añadir materiales a nuestra render para darle ese algo que hara la diferencia entre una imagen sintetica de una imagen real.
Antes explicaremos los conceptos basicos para la creacion de nuestros materiales:
  • Color: tono cromático propio de un objeto. Se puede usar un color único o una imagen como mapa de colores.
  • Brillo especular: rebote de la luz sobre la superficie del objeto proveniente del emisor lumínico. Cuando más rugosa sea la superficie del mismo, más se refractará (esparcirá) la luz. Se puede controlar tanto la intensidad, como el color o el nivel de refracción. Los más utilizados son el Blinn (plásticos, madera y casi cualquier material), Anisotrópico (CDs u otra superficie con microsurcos), Multi-Layer (combinación de dos brillos especulares para conseguir un efecto más atractivo en muchos casos ).
  • Opacidad: grado de transparencia de un objeto. Se puede delimitar con un porcentaje o utilizando un mapa de opacidad, donde los tonos más claros indicarían opacidad y los más oscuros transparencia.
  • Reflexión: propiedad de ciertos materiales de reflejar la luz (la imagen). Se puede especificar el porcentaje de reflexión así como lo difuminado que esté.
  • Refracción: cualidad de los materiales transparentes o translúcidos de variar la trayectoria de los fotones (luz) que los atraviesan distorsionando así lo que se ve a través de ellos. La cantidad de variación de la trayectoria la da el Indice de Refracción (IOR en inglés). 


Paso 1: Abre el editor de materiales del 3d max y escoge un nuevo material, MULTI-LAYER, para reconocerlo en la escena, coloca un nombre ORO

Paso 2: Agrega al slot DIFUSE los valores: Red 26, Green 18, Blue 4. Luego en DIFUSE LEVEL coloca el valor de 30

Paso 3: En los slot de Especual coloca los siguientes valores
En First Specular level coloca los siguientes valores Red =245, Green=179, Blue=30
First Specular Level = 120
First Specular Glossiness = 25

En Second Specular level coloca los valores Red =255, Green=255, Blue=255
Second Specular Level = 175
Second Specular Glossiness = 90
Paso 4: Activa la casilla de REFLECTION y añade el mapa FALLOF

En los parametros de FALLOFF realiza los siguientes cambios

Finalmente aplique el material a los objetos



Traducido de http://www.tutorialplanet.net/

continue reading

29/12/09

Bandera ondeando en 3d Max

JAN29

En este pequeño videotutorial se enseña la manera de crear una bandera ondeando con el programa 3d Max

El efecto que se le quiere dar es asemejarse lo mas posible a la realidad, para lo cual se hara uso de la herramienta CLOTH y del modificador WIND del 3d max, asi se lograra una simple animacion del viento contra la bandera
Video tutorial

Este es un sencillo ejemplo de lo que se puede hacer con este método de animación


Para descargar el archivo 3d de este tutorial + capturas de pantalla



continue reading

28/12/09

Primer applet en netbeans

JAN29


Segun santa wikipedia un applet se define como un componente de una aplicación que se ejecuta en el contexto de otro programa, por ejemplo un navegador web. El applet debe ejecutarse en un contenedor, que lo proporciona un programa anfitrión, mediante un plugin, o en aplicaciones como teléfonos móviles que soportan el modelo de programación por applets.

A diferencia de un programa, un applet no puede ejecutarse de manera independiente, ofrece información gráfica y a veces interactúa con el usuario, típicamente carece de sesión y tiene privilegios de seguridad restringidos. Un applet normalmente lleva a cabo una función muy específica que carece de uso independiente.

Un Java applet es un código JAVA que carece de un método main, por eso se utiliza principalmente para el trabajo de páginas web, ya que es un pequeño programa que es utilizado en una página HTML y representado por una pequeña pantalla gráfica dentro de ésta

Creando el applet.
1. Crea un nuevo proyecto en netbeans FILE - NEW PROJECT.

2. Dale un nombre, para este ejemplo "applet1"

3. Al crear el nuevo proyecto, por defecto te crea la clase "main.java", debes eliminar esta clase ya que no nos sirve para el applet.
4. Crea una nueva clase, llamala "miapplet.java". Debes tener algo como esto en el proyecto

5.El codigo correspondiente para la clase "miapplet.java", es el siguiente:

package applet1;
import java.awt.*;
import java.applet.*;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class miapplet extends Applet {
    
    @Override
    public void paint(Graphics g) {
        g.setColor( Color.BLUE );        
        Font f = new Font( "TimesRoman",Font.BOLD, 36);
        g.setFont(f);
        g.drawString("Hola Mundo",40,50);
        g.drawOval(100, 80, 100, 100);
        g.setColor( Color.black );
        g.drawRect(150, 70, 60, 60);
        g.setColor( Color.red );
        g.fillRect(150, 85, 35, 140);
        g.setColor(Color.GREEN);        
        g.fillOval(80, 70, 60, 70);        
    }    
}


Esta clase lo que hace es dibujar en pantalla el clasico "Hola mundo" ademas de dibujar algunas formas geometricas.
6. Ahora para ejecutar el applet, al no tener un main que lance la aplicacion, nos saldra un mensaje "No main classes found" por lo cual tampoco generara los .class que nos interesa, para esto, en ves de presionar F6, dirigete al proyecto y realiza un clic derecho sobre el proyecto y elige la opcion Clean and Build, asi no genera los .class que necesitamos.


Para ejecutar el applet en el appletviewer, clic derecho sobre la clase "miapplet" y elige la opcion "Run File"


el resultado en el appletviewer

Ademas hay que notar que en la pestaña Files, nos construye automaticamente el archivo HTML, el cual nos sirve para poder ver el applet desde el navegador. Para ello clic derecho sobre el archivo html y elegir la opcion VIEW


continue reading

24/12/09

Encriptación: Metodo Bífido en java

JAN29



El método Bífido es un cifrado fraccionario. Es decir que cada letra viene representada por una o más letras o símbolos, y donde se trabaja con estos símbolos más que con las letras mismas.

El método comienza con la utilización de un alfabeto ordenado o desordenado (depende del grado de dificulad que se le pretenda dar en su descifrado) en una matriz 5x5.

En este ejemplo utilizaremos la siguiente matriz:

Al ser una matriz de 5x5 nos vemos obligados a cifrar de la misma forma la I y la J. El contexto nos permitirá distinguir cual de las dos letras se pretendía cifrar.
Para cifrar el texto en claro se escriben los equivalentes numéricos de cada letra, utilizando sus "coordenadas".

Por ejemplo: HOLA MUNDO, genera las siguientes coordenadas (f,c) 233431113245331434, y para proceder con la encriptacion la cadena de coordenadas resultantes es dividida en dos:
233431113
245331434
y se forma una nueva cadena de coordenadas 22 34 35 43 33 11 14 13 34 las cuales formaran el nuevo mensaje encriptado GOPS NADCO.

Este método altera la frecuencia de los caracteres a diferencia de lo que ocurre por ejemplo con los cifrados monoalfabéticos.

La interfaz

Creamos una clase llamada bifido.java, en esta clase colocamos el codigo respectivo para realizar la encriptacion como la desencriptacion, el codigo se encuentra comentado.


/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class Bifido {

    char[][] matriz = new char[6][6];
    char[] mensaje;
    private String abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";    
    
    public Bifido(){   
        //la tabla esta formada por 25 letras, donde I=J
        matriz[1][1]='A'; matriz[1][2]='B';matriz[1][3]='C';matriz[1][4]='D';matriz[1][5]='E';
        matriz[2][1]='F'; matriz[2][2]='G';matriz[2][3]='H';matriz[2][4]='I';matriz[2][5]='K';
        matriz[3][1]='L'; matriz[3][2]='M';matriz[3][3]='N';matriz[3][4]='O';matriz[3][5]='P';
        matriz[4][1]='Q'; matriz[4][2]='R';matriz[4][3]='S';matriz[4][4]='T';matriz[4][5]='U';
        matriz[5][1]='V'; matriz[5][2]='W';matriz[5][3]='X';matriz[5][4]='Y';matriz[5][5]='Z';        
    }
    
    public String Encriptar(String t){
        t = clean(t);
        String nt="";
        String enc="";
        int fila ;
        int col;
        //para cada caracter se extrae el par de numeros correspondientes en la matriz
        for(int i=0; i<t.length();i++){
            nt = nt + getposicion(t.charAt(i));
        }           
        //Ahora se realiza el proceso de encriptacion
        for(int i=0;i<nt.length()/2;i++){            
            fila = Integer.parseInt(String.valueOf(nt.charAt(i)));             
            col = Integer.parseInt(String.valueOf(nt.charAt(i + nt.length()/2)));          
            enc = enc + String.valueOf(matriz[fila][col]);            
        }                
        enc=build(enc);
        return enc;
    }
    
    public String Desencriptar(String t){
        t=clean(t);
        String nt="";
        String tmp1="";
        String tmp2="";
        boolean b=true;
        //para cada caracter se extrae el par de numeros correspondientes en la matriz
        for(int i=0; i<t.length();i++){
            nt = nt + getposicion(t.charAt(i));
        }
        //como la cadena de numeros se encuentra encriptada, se procede
        //a su nuevo ordenamiento
        for(int i=0;i<nt.length();i++){
            if(b){
                tmp1= tmp1 + nt.charAt(i);
                b=false;
            }
            else
            {
                tmp2= tmp2 + nt.charAt(i);
                b=true;
            }
        }        
        nt= tmp1+tmp2;
        tmp1="";
        int fila;
        int col;
        //ahora que ya se tiene a la cadena de numeros con el orden original
        //se procede a reconstruir el mensaje
        for(int i=0; i<nt.length();i+=2){
            fila = Integer.parseInt(String.valueOf(nt.charAt(i)));     
            col = Integer.parseInt(String.valueOf(nt.charAt(i+1)));     
            tmp1 = tmp1 + String.valueOf(matriz[fila][col]);            
        }        
        tmp1=build(tmp1);
        return tmp1;
    }    
    //obtiene la posicion de filas y columnas correspondientes al caracter
    //pasado como parametro en la matriz
    private String getposicion(char c){
        String p = null;
        if(c=='J'){//como el caracter J no se encuentra en la tabla
            //se añade automaticamente con la posicion de I
            p="24";
        }
        else{
            for(int i=0;i<6;i++){
                for(int j=0;j<6;j++){
                    if(c==matriz[i][j]){
                      p = Integer.toString(i)+Integer.toString(j);
                      break;
                    }                
                }
            }
        }
        return p;
    }
    //encargado de limpiar el mensaje extrayendo solo las letras y
    //guardando los caracteres especiales para rearmar el mensaje despues
    private String clean(String t){   
      t = t.toUpperCase();  
      mensaje = t.toCharArray();
      String tmp1="";      
      for(int i=0;i<mensaje.length;i++){
          int x = abc.indexOf(mensaje[i]);
          if(x!=-1){//es una letra valida
              tmp1=tmp1+mensaje[i];
          }
      }       
      return tmp1;
    }
    //reconstruye el mensaje con las palabras encriptadas/desencriptadas
    //añadiendo los caracteres especiales
    private String build(String t){
        String tt="";
        int count=0;
        for(int i=0;i<mensaje.length;i++){
            int x = abc.indexOf(mensaje[i]);
            if(x!=-1){                
                tt= tt + t.charAt(count);
                count++;
            }
            else
            {
                tt=tt + mensaje[i];
            }    
        }
        return tt;
    }
}


Para implementar este clase en nuestra interfaz, hacemos las llamadas correspondientes a los objetos jButton


private void cmdEncriptarActionPerformed(java.awt.event.ActionEvent evt) {
        String t = texto1.getText();        
        texto2.setText(b.Encriptar(t));
} 

private void cmdDesencriptarActionPerformed(java.awt.event.ActionEvent evt) {
        String t = texto1.getText();        
        texto2.setText(b.Desencriptar(t));
}

El resultado


Ahora para incentivar en la construccion y prueba de este codigo, te presento a Natalia

Si quieres saber mas de ella decifra el siguiente mensaje, encontraras informacion importante, asi como su mail para que chatees con ella.


DZLE OC CDEYTPN, NCEST ACÑNDFTB DO CI TOM, AQBDQOA.
VN UQKIR ST EDCTA, YMDBBN Y DAYZAK, NR LÚEFSX DHSDCMDA
YF KT "WSOT UCCAVL", CWCMTL CAVV QBG DB FQLD: "AAQ 
GXQAPA DOPSQ ACQ KUO TY OGQL HSDLDEGDC AVAO SR IIQT
UBD AZ TMAZOCQHM SAL IYLZA VTMACCTNS, APNQN L LQDNDZACN".
DI GORLKCD QPDSCXA VOD MDBC NI ITSMAA MI HQFH_2590@NTSMDSI.UAP
DWOOQE!!!


SUERTE!!!

continue reading

23/12/09

Codigo Cesar: Algoritmo de encriptamiento en java

JAN29


Utilizado, de ahí su nombre, por Julio César para comunicarse con sus oficiales, consiste en sustituir cada letra del mensaje por la que está n posiciones más adelante o atrás en el alfabeto.

Si n = 3, la A se sustituiría por la D, la B por E, la C por la F y así sucesivamente. De este modo, la palabra ABC se transforma en DEF encriptada, siendo n la llave (key) para poder decifrarla.

Paso 1: Crea un nuevo proyecto en Netbeans y agreaga un jFrame y añade los siguientes objetos.

Paso 2: crea una nueva clase cesar.java y añade el codigo:


/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class cesar {
    
private String tabla = "abcdefghijklmnopqrstuvwxyzáéíóú 1234567890@.,;:-+*/$#¿?!¡=()[]{}";

    public cesar(){        
    }
        
    public String Encriptar(String t, int key){       
        String texto = LimpiarCadena(t);
        //aqui se almacena el resultado
        String res = "";        
        for(int i = 0; i < texto.length();i++)
        {
            //busca la posicion del caracter en la variable tabla
            int pos = tabla.indexOf(texto.charAt(i));
            //realiza el reemplazo
            if ((pos + key) < tabla.length()){
                res = res + tabla.charAt(pos+key);
            }
            else
            {
                res = res + tabla.charAt((pos+key) - tabla.length());
            }         
        }        
        return res;
    }
    
    public String Desencriptar(String t, int key){        
        String texto = LimpiarCadena(t);
        String res = "";        
        for(int i = 0; i < texto.length();i++)
        {            
            int pos = tabla.indexOf(texto.charAt(i));            
            if ((pos - key) < 0){
                res = res + tabla.charAt((pos-key) + tabla.length());
            }
            else
            {
                res = res + tabla.charAt(pos-key);
            }         
        }        
        return res;
    }
    
    private String LimpiarCadena(String t){
        //transforma el texto a minusculas        
        t = t.toLowerCase();
        //eliminamos todos los retornos de carro
        t = t.replaceAll("\n", "");  
        //eliminamos caracteres prohibidos
        for(int i = 0; i < t.length();i++)
        {
            int pos = tabla.indexOf(t.charAt(i));
            if (pos == -1){
                t = t.replace(t.charAt(i), ' ');
            }
        }        
        return t;
    }           
}

Paso 3: para ejecutar el proyecto coloca el siguiente codigo en los jButton (Encriptar y desencriptar)

private void cmdEncriptarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        String t = texto1.getText();
        int k = Integer.parseInt(txtkey.getText());
        if (k <=10){texto2.setText(c.Encriptar(t, k));}        
}     
private void cmdDesencriptarActionPerformed(java.awt.event.ActionEvent evt) {                                                
        String t = texto1.getText();
        int k = Integer.parseInt(txtkey.getText());
        if (k <=10){texto2.setText(c.Desencriptar(t, k));}
}    


Esta es una variante del algoritmo original del cesar que aparte de tomar en cuenta el abcdario, tambien añade el reconocimiento de numeros y de vocales acentuadas, asi como de algunos simbolos adicionales. Ademas el "Key", que por defecto es 3, puede ser cambiada a cualquier otro valor.

Pero como aprender es divertido, pero da flojera, para que pruebes este algoritmo te dejo un premio.


Esta linda señorita se llama carlita si quieres saber mas de ella y chatear por msn, te dejo mas datos y su correo aqui abajo:


ávkhz7shz7jvzhz7xél7whzhu7lu7áé7ípkh///
7klwluklu7kl7sh7mély1h7 7ívséuáhk7kl7áé7jvyh15u///
/lthps¿7jhyspáh?jhs*ováthps/jvtjpékhk7kl7vypnlu¿7jvjo
hihtih$7ivspíphzpáéhjpvu7zluáptluáhs¿7lu7éuh7ylshjp5ut
l7puálylzhu¿7ovtiylziézjv¿7htpzáhk$7jpáhz$7jvuáhjávz7
wyvmlzpvuhslz


si te interesa, descifre el codigo, suerte.


continue reading

21/12/09

Metodo de la burbuja (bubble sort java)

JAN29

Este metodo nos permite ordenar ascendentemente los elementos de una lista , se comienza comparando los dos primeros elementos  y si el valor del primer elemento es mayor que el segundo  entonces se intercambian valores. Luego se procede  de la misma manera con el segundo y tercer elemento, posteriormente con el tercer y cuarto elemento y asi sucesivamente hasta llegar al ultimo par de elementos, de esta manera en el ultimo elemento siempre queda el mayor valor de la lista.Por lo tanto el ultimo elemento de la lista siempre queda con el valor correcto, el mayor.

Si se quiere ordenar una lista descendentemente, entonces se aplica el mismo procedimiento, solo que ahora al comparar se pregunta si el valor  del primer elemento es menor que el segundo.
Nuestra clase se llama burbuja.java y contiene el metodo ordenar asi como un metodo para imprimir la lista.

/**
 * @web http://jc-mouse.blogspot.com/
 * @author mouse
 */

public class burbuja {
    int[] vector ;
    int elementos=0;
    boolean bandera=true;
    
    public burbuja (int[] v){
        this.vector=v;
    }    

    public int[] ordenar(){
        int p1;
        int p2;        
        int y=0;
        bandera=true;
        elementos = vector.length;
        while((elementos > 1) && (bandera==true) )
        {
            y=0;
            p1 = vector[y];
            p2 = vector[y+1];
            elementos--;
            bandera=false;
            for(int i=0; i < elementos; i++){                                
                if (p1>p2){                   
                    vector[i]=p2;
                    vector[i+1]=p1;
                    bandera=true;                      
                }//fin de si         
                System.out.println("ordenando: "+ Mostrar(vector));
                y++;
                if (y < elementos){                    
                    p1 = vector[y];
                    p2 = vector[y+1];                
                }                    
            }//fin for                       
        }//fin de mientras
        return vector;
    }
    //para imprimir el array
    public String Mostrar(int[] v){
        String s=" | ";
        for (int i=0; i < v.length; i++){
            s += v[i] + " | ";
        }
        return s;
    }    
}

Para implementar esta clase, el main debe contener el siguiente codigo:


public class Main {  
   
    public static void main(String[] args) {         
        //creamos un array y llenamos este con numeros al azar
        int[] c = null ;        
        c = generarlista(5);        
        //creamos el objeto burbuja y mostramos
        burbuja b = new burbuja(c);                
        System.out.println("ORIGINAL : "+ b.Mostrar(c));        
        System.out.println("ORDENADO : "+ b.Mostrar(b.ordenar()));
        
    }
    //genera un array de n elementos
    public static int[] generarlista(int n){        
        int[] v = new int[n];
        Random rand = new Random();
        for (int i=0; i<v.length; i++){
            v[i]=rand.nextInt(1000);
        }   
        return v;
    }    
}

Aparte se tiene un metodo para generar un array de enteros "generarlista()" el cual utiliza un random para llenar un array con "n" numeros enteros. este metodo nos sirve para realizar la prueba mas facilmente.
Como se puede observar en el resultado este metodo no es eficiente, ya que el tiempo requerido para ordenar listas grandes se incrementa geometricamente, razon por la cual solo resulta de utilizad para ordenar listas pequeñas (ni se te ocurra probar este algoritmo con un 1000000 de elementos), ademas otra desventaja que presenta es el de no tener un parametro de control que nos indique que la lista ya esta ordenana (incluso si la lista esta ordenada desde el principio), el procedimiento se llevara a cabo n-1 veces.

continue reading

18/12/09

Reproducir video en java y netbeans con Java Media Framework

JAN29

Reproducir un video en java no es imposible menos tan complicado como parece, ademas java nos proporciona herramientas para desarrollar nuestras aplicaciones. Basta de charla y vamos a lo que interesa.

¿que necesitamos?

  • Necesitamos el API multimedia de java llamado Java Media Framework, descargate la ultima version de su pagina, instalalo y reinicia la pc.
  • Netbeans claro, sera nuestra herramienta para desarrollar la aplicacion de prueba.
  • Un archivo de video con extension MPG, segun lei, la api de java JMF es capaz de reproducir varios tipos de formatos, en mi caso solo reprodujo MPG y MP3, las causas no lo se aun.
El reproductor

El reproductor consta de una clase videopanel,java encargada de crear el objeto reproductor y de una clase reproductor,java, nuestra interfaz.

Codigo fuente

Clase videopanel.java


package videojava;
import java.awt.Component;
import java.awt.Dimension;
import java.io.IOException;
import java.net.URL;
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author mouse
 */
public class videopanel extends javax.swing.JPanel {
private Player mediaPlayer;
private Component controls;        
    
    public videopanel(URL mediaURL, Dimension d){
        Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, true );
         try
            {
         // crea un reproductor especificando la direccion del archivo
         mediaPlayer = Manager.createRealizedPlayer( mediaURL );         
         // optiene los componentes del video
         Component video2 = mediaPlayer.getVisualComponent();
         video2.setSize(d.width, d.height);         
         video2.setVisible(true);
         //optiene los componentes de control del reproductor
         controls = mediaPlayer.getControlPanelComponent();
         controls.setSize(d.width, 24);
         
         if ( video2 != null )            
            add( video2 ); //agrega el componente del reproductor al panel 
         
         mediaPlayer.start(); // comienza la reproduccion
      } // fin try
      catch ( NoPlayerException noPlayerException )
      {
         System.err.println( "No se encontro medio disponible, osea no se reproduce archivo" );
      } // fin catch
      catch ( CannotRealizeException cannotRealizeException )
      {
         System.err.println( "no se pudo realizar el reproductor" );
      } // fin catch
      catch ( IOException iOException )
      {
         System.err.println( "Error de lectura del archivo" );
      } // fin catch
    }
    
    public Component controles (){     
        return controls;        
    }
    
    public Component controles(Dimension d){
        controls.setSize(d);
        return controls;
    } 
}

Esta clase hace uso del API JMF y la extiende hasta un objeto, en este caso un jPanel, pasando como referencias la URL del video en cuestion, tratando de capturar los errores que se pudieran encontrar en el proceso, el codigo esta por demas comentado y creo que se entiende.

La interfaz
La interfaz del reproductor es sencilla, consta de un jpanel pantalla, lugar donde insertaremos el video, un jpanel control donde se localizara los controles del reproductor, jButton abrir y jTextfiel txturl

Las partes mas importantes del codigo son:

Este codigo debe añadirse en el objeto jButton "abrir" con el evento ActionPerformed, lo que hace es llamar a una ventana de dialogo para buscar el archivo y luego inicializar los objetos reproductor y controles

URL mediaURL = null;
videopanel mediaPanel;

private void abrirActionPerformed(java.awt.event.ActionEvent evt) {                                      
       JFileChooser fileChooser = new JFileChooser();
       int result = fileChooser.showOpenDialog(null);  
        if ( result == JFileChooser.APPROVE_OPTION ){
            try {           
                //se asigna a mediaURL el archivo de video seleccionado
                mediaURL = fileChooser.getSelectedFile().toURL();
                txturl.setText("" + mediaURL); 
                //se obtiene el tamaño del panel de video
                Dimension dp = new Dimension(pantalla.getWidth(), pantalla.getHeight());
                //se crea el reproductor pasando como parametros
                // el archivo y dimensiones
                mediaPanel = new videopanel( mediaURL ,dp );           
                pantalla.add(mediaPanel);            
                pantalla.setVisible(true);
                //se obtiene dimensiones del contenedor de los controles
                // y se pasa como parametro para crear los controles de reproduccion
                Dimension d = new Dimension(control.getWidth(),control.getHeight());
                control.add(mediaPanel.controles(d));            
                control.setVisible(true);            
            } 
            catch (IOException ex) {
                Logger.getLogger(reproductor.class.getName()).log(Level.SEVERE, null, ex);
            } 
        }
    }                



Para descargarte el proyecto de ejemplo
Click para descargar

continue reading

14/12/09

jPanel con color degradado de fondo en netbeans

JAN29



Para añadir un interesante y atractivo efecto a nuestros proyectos en netbeans como es el degradado de colores, crearemos un jPanel personalizado, esto puede hacerce de varias maneras, en este tutorial lo haremos de la manera mas sencilla posible.

Paso 1: Crea un nuevo proyecto en Netbeans y añade un jFrame, a este añade 3 jPanels y acomodalos como se ve en la imagen.


Paso 2: En el proyecto crea un nueva clase, llamala jpColor.java, este es el codigo que debes colocar en la clase.


import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.Random;

/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class jpColor extends javax.swing.JPanel{
    private Color color1 = new Color(0,0,0);
    private Color color2 = new Color(0,0,0);
    
    public jpColor(){
    }
    
    public jpColor(Color c1, Color c2){
        color1 = c1;
        color2 = c2;        
    }
    
    @Override
    public void paint(Graphics g) {    
        Graphics2D g2 = (Graphics2D) g.create();
        Rectangle clip = g2.getClipBounds();                        
        g2.setPaint(new GradientPaint(0.0f, 0.0f, color1.darker(),0.0f ,getHeight(), color2.darker()));        
        g2.fillRect(clip.x, clip.y, clip.width, clip.height);        
    }
    
    public void setRandomColor(){
        Random rand = new Random();
        this.color1 = new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255));
        this.color2 = new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255));
    }
    
    public void setVistaColor(){        
        this.color1 = new Color(66,111,166);
        this.color2 = new Color(103,174,118);        
    }
    
}

Explicacion: Lo que hacemos es crear un nuevo jPanel sobreescribiendo el metodo PAINT. Esta nueva clase consta de dos constructores, uno que no contiene elementos y el segundo que recibe como parametros de entrada, dos colores que los utilizara para el degradado.

Ademas cuenta con el metodo setRandomColor(), este metodo aplica un color aleatorio a los atributos Color1 y Color2, el metodo paint es el encargado de tomar estos valores y aplicarlos al jPanel.

El metodo setVistaColor(), muestra como colocar un valor ya predefinido por el usuario, util si no quieres que tu proyecto paresca un circo con todo tipo de colores.

Paso 3: Ahora en el jFrame, mas propiamente en su constructor, crea una referencia al objeto jpColor para cada jPanel que tengas en el jFrame.


public class paintform extends javax.swing.JFrame {
    
    /** Creates new form paintform */
    public paintform() {
        initComponents();          
        
        //Objeto jPanel con color VistaColor
        jpColor jpVista = new jpColor();
        jpVista.setSize(this.getSize());
        jpVista.setVistaColor();
        jPanel2.add(jpVista);
        
        //Objeto jPanel con color  aleatorio
        jpColor jpRandom = new jpColor();
        jpRandom.setSize(this.getSize());
        jpRandom.setRandomColor();
        jPanel1.add(jpRandom);
        
        //Objeto jPanel con color personalizado
        Color c1 = new Color(255,100,45);
        Color c2 = new Color(23,140,189);
        jpColor jpmicolor = new jpColor(c1,c2);
        jpmicolor.setSize(this.getSize());        
        jPanel3.add(jpmicolor);       
    }


Eso es todo, aqui tenemos el resultado

continue reading

11/12/09

Base de Datos + Netbeans + MySQL (Proyecto Completo)

JAN29

Nuestro proyecto de Base de Datos llamado "Contactos", esta completo o mas o menos completo, el codigo contiene las funciones basicas  que debe tener un proyecto de Base de Datos, añade nuevos registros, los elimina y tambien puede modificar esos registros.

El mini tutorial esta compuesto de 8 capitulos.
  1. Clase conexion Base de Datos
  2. Probando la clase conectate.java
  3. Sentencias SQL en Netbeans
  4. Leer base de datos en Netbeans
  5. Interfaz y Base de Datos con Netbeans
  6. Agregar Registros a Base de Datos
  7. Eliminar Registros de la Base de Datos
  8. Actualizar la Base de Datos

El proyecto.

- Nuestra base de datos se llama "DBContactos" en MySQL

- Contiene una única tabla llamada "Persona"
El proyecto contiene las clases:
  • conectate.java : encargada de conectarse con la base de datos
  • persona.java: esta clase contiene todas las funciones encargadas de manipular la base de datos
  • tablaform.java: es la interfaz grafica en si

Ademas tambien se añadieron las clases:
  • mipanel.java
  • degradadoclass.java
Ambas clases  encargadas de añadir imagenes y colores a la interfaz grafica, para hacer de el proyecto final un poco mas agradable a la vista. estas clases no tienen nada que ver con la base de datos.

Esta es nuestra interfaz final

El codigo fuente [Enlace actualizado]
Click para descargar
Si te gusto, QUE BIEN!!!
Si no te gusto, QUE MAL!!!
Si no entendiste, QUE PASO???

continue reading

Actualizar/update registros de la base de datos con netbeans

JAN29



Una ultima funcionalidad que le falta a nuestro miniproyecto de base de datos, es la de poder "modificar" los datos leidos de la base de datos, para despues poder guardar esos cambios, para ello:

- Añadimos un nuevo jButton a nuestro proyecto.

- En nuestra clase, persona.java añadimos el codigo:



public void updatePersona(String id, String name, String paterno, String materno, String mail){
       try {            
            PreparedStatement pstm = con.getConnection().prepareStatement("update persona " +
            "set Nombre = ? ," +
            "appPaterno = ? ," +
            "appMaterno = ? ," +                    
            "mail = ? " +                    
            "where id = ? ");            
            pstm.setString(1, name);                   
            pstm.setString(2, paterno);
            pstm.setString(3, materno);
            pstm.setString(4, mail);
            pstm.setString(5, String.valueOf(id));
            pstm.execute();
            pstm.close();            
         }catch(SQLException e){
         System.out.println(e);
      }
   }

Explicacion: Esta nueva funcion, recibe como parametros el  "id" codigo del registro que se modificara, ademas de los datos necesarios para realizar la consulta, como el nombre, apellido paterno , materno y el mail de la persona. Luego se realiza una consulta SQL pasando esos datos.

Ya en el jFrame de nuestro proyecto, al nuebo jButton que creamos, añadimos el siguiente codigo:


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if (fila > -1){
        String codigo = String.valueOf(tabla.getValueAt(fila, 0));
        String name = txtname.getText();
        String pat = txtpaterno.getText();
        String mat = txtmaterno.getText();      
        String mail = txtmail.getText();        
        p.updatePersona(codigo, name, pat, mat, mail);
        updateTabla(); 
        }
    }                                        

Lo unico que hace es capturar los datos del JTable, asignarlas a variables y llamar a la funcion updatePersona().

continue reading

10/12/09

Eliminar/Borrar registros de base de datos con netbeans

JAN29



Le añadiremos una nueva funcionalidad a nuestro proyecto base de datos y netbeans, esta funcionalidad es la de poder eliminar registros de la base de datos, todo de una forma visual y sencilla.

Recordemos un poco, nuestro proyecto se llama "contactos", las clases que utilizamos son conectate.java y persona.java, la base de datos (dbcontactos) y contiene una tabla (persona) puedes ver con mas detalle nuestra base de datos aqui.

Los cambios que realizamos son:

Añadiremos un nuevo jButton al proyecto, lo llamaremos "cmdEliminar", nuestra interfaz debe quedar de esta forma.


Para poder eliminar un registro de la base de datos realizaremos una instruccion SQL con el comando DELETE, para ello debemos tener muy en cuenta la conformacion de nuestra tabla "Persona".

En la clase persona.java, añadiremos la nueva funcion deletePersona(), dentro la cual colocaremos la instruccion SQL, ejecutaremos la sentencia y cerramos.


public void deletePersona(String cod){  
            try {                
                PreparedStatement pstm = con.getConnection().prepareStatement("delete from persona where id = ?");            
                pstm.setString(1, cod);                   
                pstm.execute();
                pstm.close();            
            }catch(SQLException e){
            System.out.println(e);
            }            
   }


Ahora en el JFrame correspondiente, al boton que creamos "cmdEliminar", le añadimos el evento ActionPerformded, copias el siguiente codigo.


private void cmdEliminarActionPerformed(java.awt.event.ActionEvent evt) {
        if (fila > -1){
            String codigo = String.valueOf(tabla.getValueAt(fila, 0));                        
            p.deletePersona(codigo);
            updateTabla();
            fila=-1;
        }
    }


Este código lo que hace es revisar si la variable "fila" contiene un valor diferente a "-1",esto sucede cuando se realiza un clic sobre el objeto "tabla", si esto es cierto, quiere decir que tenemos una fila seleccionada, por lo tanto procedera a extraer el codigo correspondiente y con este codigo hara un llamado a deletePersona(codigo), elimina el registro y reinicia el valor de fila a -1 para evitar inconvenientes.

continue reading

Modelos semánticos

JAN29

Los sistemas de base de datos relacionales solo expresan en realidad una comprension muy limitada del significado la informacion contendida en la base de datos, por lo general  entienden ciertos valores sencillos de datos y ciertas interrelaciones de muchos a uno entre dichos valores, toda informacion mas alla de eso se deja al usuario.

Los modelos semanticos en cambio permiten captar mejor el significado (semantica) de los datos contenidos en la base de datos.

Objetos semantico. Un objeto semántico es una representación de algunas cosas identificables en el ambiente de trabajo de los usuarios. De manera formal, un objeto semántico es un conjunto de atributos que describen con eficacia una identidad bien determinada. Los objetos semánticos se agrupan en clases. Una clase de objeto tiene un nombre que la hace diferente a otras y que corresponde a los nombres de las cosas que representa. Los nombres de clases se escriben en mayúsculas. Un objeto semántico particular es una ocurrencia de tal clase. Por ejemplo: "William Shakespeare", es una ocurrencia de la clase ESCRITOR, y "CUARTO" es una ocurrencia de la clase EDIFICIO.

Descripcion general de un objeto semántico.

Modelo lógico de datos:

Equivalencias MOR - MER


continue reading

Post recomendado