Búsqueda por palabras claves

No se olviden de consultar por palabras claves! Ejemplo de Estructura de datos en java, tutorial de estructura de datos
Búsqueda personalizada

lunes, 24 de octubre de 2011

Cómo realizar la comparación de 2 imágenes y determinar si son iguales o similares

Esta entrada contiene el código para determinar si 2 imagenes son iguales, si puede variar los parámetros para que dos imágenes que tienen similitud los reconozca como similares.

Está realizado en Netbeans en un proyecto en consola para ello se debe crear un nuevo proyecto Java Aplication, para mi caso el nombre es ComparacionImagen.

A continuación crear una nueva clase, dar clic sobre el paquete y luego crear la Clase ImageCompare.

package comparacionimagen;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;

 public class ImageCompare {

 protected BufferedImage img1 = null;
 protected BufferedImage img2 = null;
 protected BufferedImage imgc = null;
 protected int comparex = 0;
 protected int comparey = 0;
 protected int factorA = 0;
 protected int factorD = 10;
 protected boolean match = false;
 protected int debugMode = 0; // 1: textual indication of change, 2: difference of factors

 // constructor 1. use filenames
 public ImageCompare(String file1, String file2) {
  this(loadJPG(file1), loadJPG(file2));
 }

 // constructor 2. use awt images.
 public ImageCompare(Image img1, Image img2) {
  this(imageToBufferedImage(img1), imageToBufferedImage(img2));
 }

 // constructor 3. use buffered images. all roads lead to the same place. this place.
 public ImageCompare(BufferedImage img1, BufferedImage img2) {
  this.img1 = img1;
  this.img2 = img2;
  autoSetParameters();
 }

 // like this to perhaps be upgraded to something more heuristic in the future.
 protected void autoSetParameters() {
  comparex = 10;
  comparey = 10;
  factorA = 10;
  factorD = 10;
 }

 // set the parameters for use during change detection.
 public void setParameters(int x, int y, int factorA, int factorD) {
  this.comparex = x;
  this.comparey = y;
  this.factorA = factorA;
  this.factorD = factorD;
 }

 // want to see some stuff in the console as the comparison is happening?
 public void setDebugMode(int m) {
  this.debugMode = m;
 }

 // compare the two images in this object.
 public void compare() {
  // setup change display image
  imgc = imageToBufferedImage(img2);
  Graphics2D gc = imgc.createGraphics();
  gc.setColor(Color.RED);
  // convert to gray images.
  img1 = imageToBufferedImage(GrayFilter.createDisabledImage(img1));
  img2 = imageToBufferedImage(GrayFilter.createDisabledImage(img2));
  // how big are each section
  int blocksx = (int)(img1.getWidth() / comparex);
  int blocksy = (int)(img1.getHeight() / comparey);
  // set to a match by default, if a change is found then flag non-match
  this.match = true;
  // loop through whole image and compare individual blocks of images
  for (int y = 0; y < comparey; y++) {
   if (debugMode > 0) System.out.print("|");
   for (int x = 0; x < comparex; x++) {
    int b1 = getAverageBrightness(img1.getSubimage(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1));
    int b2 = getAverageBrightness(img2.getSubimage(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1));
    int diff = Math.abs(b1 - b2);
    if (diff > factorA) { // the difference in a certain region has passed the threshold value of factorA
     // draw an indicator on the change image to show where change was detected.
     gc.drawRect(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1);
     this.match = false;
    }
    if (debugMode == 1) System.out.print((diff > factorA ? "X" : " "));
    if (debugMode == 2) System.out.print(diff + (x < comparex - 1 ? "," : ""));
   }
   if (debugMode > 0) System.out.println("|");
  }
 }

 // return the image that indicates the regions where changes where detected.
 public BufferedImage getChangeIndicator() {
  return imgc;
 }

 // returns a value specifying some kind of average brightness in the image.
 protected int getAverageBrightness(BufferedImage img) {
  Raster r = img.getData();
  int total = 0;
  for (int y = 0; y < r.getHeight(); y++) {
   for (int x = 0; x < r.getWidth(); x++) {
    total += r.getSample(r.getMinX() + x, r.getMinY() + y, 0);
   }
  }
  return (int)(total / ((r.getWidth()/factorD)*(r.getHeight()/factorD)));
 }


 // returns true if image pair is considered a match
 public boolean match() {
  return this.match;
 }

 // buffered images are just better.
 protected static BufferedImage imageToBufferedImage(Image img) {
  BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
  Graphics2D g2 = bi.createGraphics();
  g2.drawImage(img, null, null);
  return bi;
 }

 // write a buffered image to a jpeg file.
 protected static void saveJPG(Image img, String filename) {
  BufferedImage bi = imageToBufferedImage(img);
  FileOutputStream out = null;
  try {
   out = new FileOutputStream(filename);
  } catch (java.io.FileNotFoundException io) {
   System.out.println("File Not Found");
  }
  JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
  param.setQuality(0.8f,false);
  encoder.setJPEGEncodeParam(param);
  try {
   encoder.encode(bi);
   out.close();
  } catch (java.io.IOException io) {
   System.out.println("IOException");
  }
 }

 // read a jpeg file into a buffered image
 protected static Image loadJPG(String filename) {
  FileInputStream in = null;
  try {
   in = new FileInputStream(filename);
  } catch (java.io.FileNotFoundException io) {
   System.out.println("File Not Found");
  }
  JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
  BufferedImage bi = null;
  try {
   bi = decoder.decodeAsBufferedImage();
   in.close();
  } catch (java.io.IOException io) {
   System.out.println("IOException");
  }
  return bi;
 }

}

En el método main debemos ir calibrando a nuestras necesidades
package comparacionimagen;


/**
 *
 * @author Paulo
 */
public class Main {

  

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       // Especificamos las imagenes que deseamos comparar, cada imagene debe tener una dimension de 300 x 225.
  ImageCompare ic = new ImageCompare("e:\\test1.jpg", "e:\\test5.jpg");
  // Set the comparison parameters.
  //   (numero de regiones verticales, numero de regiones horizontales, sensibilidad, stabilizer)
  ic.setParameters(12, 12, 15, 10); 
                 // Display some indication of the differences in the image.
  ic.setDebugMode(2);
  // Compare.
  ic.compare();
  // Display if these images are considered a match according to our parameters.
  System.out.println("Match: " + ic.match());
  // si las imagenes son distintas se creará una nueva imagen con nombre changes.jpg en la que se muestre las regiones que son distintas pues sobrepasan la sensibilidad.
  if (!ic.match()) {
   ImageCompare.saveJPG(ic.getChangeIndicator(), "e:\\changes.jpg");
  }
 }

}

Información tomada de http://mindmeat.blogspot.com/2008/07/java-image-comparison.html

jueves, 20 de octubre de 2011

Ejemplo de GUI Java Swing

Para realizar una aplicación con Formultario en java, debemos usar el paquete Swing, para ello debemos saber en terminos generales que disponemos de la clase JFrame (Ventana), misma que tiene un panel por defento, para ello podemos hacer uso del método getContentPane, por otro lado debemos implementar la interfaz ActionListener para poder controlar los eventos que se producen.

El siguiente ejercicio es una pequeña simulación de una aplicación para venta de productos de un tienda de juegos.

El ejercicio está desarrollado en Netbeans, los pasos para generar el proyecto son los siguientes:

1.- Crear un nuevo proyecto tipo Java Aplication. (Para este caso lo he puesto Venta Productos)
2.- Sobre el paquete Creamos la clase Producto  que va permitir almacenar la información de cada juego. El código de la clase es el siguiente:
package ventaproductos;

/**
 *
 * @author Paulo
 */
public class Producto {
    private String nombre;
    private String tamanio;
    private String categoria;
    private int disponibles;
    private double precio;

    public Producto(String nombre, String tamanio, String categoria, int disponibles, double precio) {
        this.nombre = nombre;
        this.tamanio = tamanio;
        this.categoria = categoria;
        this.disponibles = disponibles;
        this.precio=precio;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the tamanio
     */
    public String getTamanio() {
        return tamanio;
    }

    /**
     * @param tamanio the tamanio to set
     */
    public void setTamanio(String tamanio) {
        this.tamanio = tamanio;
    }

    /**
     * @return the categoria
     */
    public String getCategoria() {
        return categoria;
    }

    /**
     * @param categoria the categoria to set
     */
    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    /**
     * @return the disponibles
     */
    public int getDisponibles() {
        return disponibles;
    }

    /**
     * @param disponibles the disponibles to set
     */
    public void setDisponibles(int disponibles) {
        this.disponibles = disponibles;
    }

    /**
     * @return the precio
     */
    public double getPrecio() {
        return precio;
    }

    /**
     * @param precio the precio to set
     */
    public void setPrecio(double precio) {
        this.precio = precio;
    }

}

3.- Sobre el paquete Crear una nueva Clase llamada Ventana. Esta clase debe extender de JFrame e implementar la Interfaz ActionListener. Para organizar la información he decidio usar el Layout en modo GridLayout es decir una matriz de N x M en los cuales todos los elementos tienen el mismo tamaño.

Esto se lo puede ver a continuación.



Uploaded with ImageShack.us

Ahora continuando con la programación en el constructor debemos instanciar los Objetos tipo Producto y agregarlos al Arraylist.



Uploaded with ImageShack.us


En seguida debemos definir el título, dimensiones, layout, etc. es decir la configuración de mi Ventana, además agregamos los componentes al panel.



Uploaded with ImageShack.us


Por último debemos definir el actionListener para los controles de los cuales debemos controlar los eventos e implementar el código del método ActionPerforme.

El Código completo de la Clase ventana es el siguiente:


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ventaproductos;

import com.sun.corba.se.impl.naming.cosnaming.InterOperableNamingImpl;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 *
 * @author Paulo
 */
public class Ventana extends JFrame implements ActionListener {
   
    // Componentes que serán agregados a mi Ventana.
    private JComboBox cboJuegos;
    private JLabel lblJuego, lblNombre, lblDisponible, lblTamanio, lblCategoria, lblPrecio, lblCantidad;
    private JTextField txtNombre, txtDisponibles, txtTamanio, txtCategoria, txtPrecio, txtCantidad;
    private JButton pedir, vender;
    // Un arreglo dinámico para los productos(Juegos).
    ArrayList juegos;
    
    // Constructor
    public Ventana(){
        
         juegos=new ArrayList();
         Producto juego;
         juego =new Producto("Cars","102kb","Deportes", 30,1.30F);
         juegos.add(juego);

         juego =new Producto("Cars2","103kb","Deportes", 20,1.50F);
         juegos.add(juego);
         juego =new Producto("FIFA 2011","204kb","Deportes", 35,1.80F);
         juegos.add(juego);
         juego =new Producto("Matador","312kb","Accion", 20,1.10F);
         juegos.add(juego);
        
         this.setSize(500, 400);
         this.setLayout(new GridLayout(8,2,5,5));
         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         this.setTitle("MI ventana de Ventas de Juegos");     
         // Instanciamos y Agregamos los componente al panel
         lblJuego=new JLabel("Seleccione el Juego");
         this.getContentPane().add(lblJuego);
         cboJuegos=new JComboBox();
         for(Producto x:juegos ){
             cboJuegos.addItem(x.getNombre());
         }
         this.getContentPane().add(cboJuegos); // agregando al panel
         lblNombre=new JLabel("Nombre del Juego");
         this.getContentPane().add(lblNombre);
         txtNombre=new JTextField(40);
         this.getContentPane().add(txtNombre);

         lblCategoria=new JLabel("Categoria del Juego");
         this.getContentPane().add(lblCategoria);
         txtCategoria=new JTextField(40);
         this.getContentPane().add(txtCategoria);

                 lblTamanio=new JLabel("Tamaño del Juego");
         this.getContentPane().add(lblTamanio);
         txtTamanio=new JTextField(40);
         this.getContentPane().add(txtTamanio);

         lblPrecio=new JLabel("Precio del Juego");
         this.getContentPane().add(lblPrecio);
         txtPrecio=new JTextField(40);
         this.getContentPane().add(txtPrecio);
 lblDisponible=new JLabel("Disponible: ");
         this.getContentPane().add(lblDisponible);
         txtDisponibles=new JTextField(40);
         this.getContentPane().add(txtDisponibles);

         lblCantidad=new JLabel("Cantidad:");
         this.getContentPane().add(lblCantidad);
         txtCantidad=new JTextField(40);
         this.getContentPane().add(txtCantidad);

         pedir=new JButton("Pedir");
         vender=new JButton("Vender");
         this.getContentPane().add(pedir);
         this.getContentPane().add(vender);
         cboJuegos.addActionListener(this);
         pedir.addActionListener(this);
          vender.addActionListener(this);
    }  
    // Implementación del método abstracto
    public void actionPerformed(ActionEvent e) {
        int indice=cboJuegos.getSelectedIndex();
        if(e.getSource()==cboJuegos){
            
            txtNombre.setText(juegos.get(indice).getNombre());
            txtCategoria.setText(juegos.get(indice).getCategoria());
            txtTamanio.setText(juegos.get(indice).getTamanio());
            txtPrecio.setText(String.valueOf(juegos.get(indice).getPrecio()));
            txtDisponibles.setText(String.valueOf(juegos.get(indice).getDisponibles()));
        }

        if(e.getSource()==pedir){
              juegos.get(indice).setDisponibles(juegos.get(indice).getDisponibles()+Integer.parseInt(txtCantidad.getText()));
              txtDisponibles.setText(String.valueOf(juegos.get(indice).getDisponibles()));
        }
       if(e.getSource()==vender ){
           if((juegos.get(indice).getDisponibles()-Integer.parseInt(txtCantidad.getText()))>=0){
              juegos.get(indice).setDisponibles(juegos.get(indice).getDisponibles()-Integer.parseInt(txtCantidad.getText()));
              txtDisponibles.setText(String.valueOf(juegos.get(indice).getDisponibles()));
           }else
           {
               JOptionPane.showMessageDialog(null, "NO se dispone de la cantidad !!!");
           }
        }
    }
}


Ahora lo único que nos queda es crear un objeto tipo ventana en el método main y ejecutar.

package ventaproductos;

/**
 *
 * @author Paulo
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Ventana v=new Ventana();
        v.setVisible(true);
        //v.pack();
    }

}


La ejecución del programa se verá asi:



Uploaded with ImageShack.us

sábado, 8 de octubre de 2011

uso de matrices en java

/*
package ejerciciob6matriz;

import java.util.Scanner;

/**
 *
 * @author Paulo
 */
public class Main {

    public static void leerMatriz(float m[][], int f, int c) {
        Scanner in = new Scanner(System.in);

        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                System.out.print("Ingrese el elemento: ");
                m[i][j] = in.nextFloat();
            }
        }

    }

    public static void simetrica(float m[][], float s[][], int f, int c, int signo) {
        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                s[i][j] = (m[i][j] + signo* m[j][i]) / 2;
            }
        }
    }

    public static void imprimirMatriz(float m[][], int f, int c) {
        for (int i = 0; i < f; i++) {
            for (int j = 0; j < c; j++) {
                System.out.print(m[i][j]+"  ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        // TODO code application logic here
        float matriz[][] = new float[3][3];
        float simetrica[][] = new float[3][3];
        float antiSimetrica[][] = new float[3][3];

        System.out.println("Ingreso de la matriz");
        leerMatriz(matriz, 3, 3);
        System.out.println("\nMatriz simetrica");
        simetrica(matriz, simetrica, 3, 3,1);
        imprimirMatriz(simetrica, 3, 3);
        System.out.println("\nMatriz antisimetrica");
        simetrica(matriz, antiSimetrica, 3, 3,-1);
        imprimirMatriz(antiSimetrica, 3, 3);
    }
}

Descarga el proyecto desarrollado en Netbeans Ejercicio6

Arreglos en Java método uso de bucle while

package ejercicio5barreglos;

import java.util.Scanner;

/**
 *
 * @author Paulo
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void lectura(float m[], int f) {
        Scanner ingreso = new Scanner(System.in);
        for (int cont = 0; cont < f; cont++) {
            System.out.print("Ingrese el elemento: ");
            m[cont] = ingreso.nextFloat();
        }
    }


    public static void main(String[] args) {
        // TODO code application logic here
        float dato[];
        dato = new float[10];
        int numero;
        Scanner ingreso = new Scanner(System.in);

        do {
            System.out.print("Ingrese el numero de elementos: ");
            numero = ingreso.nextInt();
        } while (numero < 1);

        float notas[] = new float[numero];
        System.out.println("Ingreso primer arreglo:");
        lectura(dato, numero);
        System.out.println("Ingreso segundo arreglo:");
        lectura(notas, numero);
        System.out.println("Imprimir primer arreglo:");
        imprimir(dato, numero);
        System.out.println("Imprimir segundo arreglo:");
        imprimir(notas, numero);
    }

    public static void imprimir(float n[], int f) {
        int indice = 0;
        while (indice < f) {
            System.out.print(n[indice++]+" ");
        }

    }
}
Descarga el proyecto desarrollado con Netbeans Ejercicio5

Sentencia switch numeros romanos en Java

package ejercicio4switch;

import java.util.Scanner;

/**
 *
 * @author Paulo
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // Ejercicio que permite el ingreso de un número en arábigo y transforma
        // a número Romano

        Scanner entrada = new Scanner(System.in);
        int arabigo;

        System.out.println("Ingrese un número entre 1 y 5: ");
        arabigo = entrada.nextInt();
        switch (arabigo) {
            case 1:
                System.out.println(arabigo+" en Romano es I");
                break; // No olvidar la sentencia de roptura de bucle.
            case 2:
                System.out.println(arabigo+" en Romano es II");
                break;
            case 3:
                System.out.println(arabigo+" en Romano es III");
                break;
            case 4:
                System.out.println(arabigo+" en Romano es IV");
                break;
            case 5:
                System.out.println(arabigo+" en Romano es V");
                break;
            default:
                System.out.println("En la nueva version continuamos con mas numeros");
        }

    }
}

Descarga el proyecto desarrollado con Netbeans Ejercicio4

Ejercicio con for java, ingreso de datos java

package pryejerciciob;
import java.util.Scanner;
/**
 *
 * @author Paulo
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        /* La clase Scanner proporciona métodos para ingresar
        datos desde el teclado*/

        Scanner ingreso=new Scanner(System.in);
        int tabla, resultado, cont;

        do{
           System.out.print("Ingrese el numero de la tabla: ");
           // utilizamos el método nextInt para leer un entero desde teclado
           tabla=ingreso.nextInt();
        }while(tabla<1);

        for(cont=1;cont<=12;cont++){
            // observe como se imprime en pantalla el valor de las variables
            // agregando textos a la misma línea
           System.out.println(tabla+" * "+ cont +" = "+tabla*cont);
        }
    }
}

Descargar el proyecto desarrollado con Netbeans Ejercicio3

Ejecicios de Condicional en Java

/*
 
package pryejercicioa;

/**
 *
 * @author Paulo
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        float minimo = 14.00F;
        float nota = 17.56f;
        boolean resultado = true;

        resultado = (minimo < nota);
        System.out.println("El valor logico de resultado es: " + resultado);

        int cont = 10;
        String mensaje = "";
       // es un condicional que actual como un if-else
       // No es común usarlo.
        mensaje = (cont % 2 == 0) ? "PAR" : "IMPAR";
        System.out.println("EL NUMERO ES " + mensaje);


        System.out. println("Resolucion del mismo ejercicio con if-else");
        // Obtendrémos el mismo resultado, analice las diferencias en la escritura
        // esta sentencia de control es la mas usada.
        if(cont%2==0)
            mensaje="PAR" ;
        else
            mensaje="IMPAR" ;
        System.out.println("EL NUMERO ES " + mensaje);
    }
}

Descargar el proyecto desarrollado con Netbeans Ejercicio2

Ejercicio de declaración y uso de variables en Java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ejer1variables;

import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 *
 * @author Paulo
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // Empezamos a declarar variables
        String nombre; // tipo cadena de caracteres
        int edad;   // tipo entera
        boolean esJubilado;   // variable solo puede tomar 2 valores: true o false
        float salario;  // datos con punto decimal
        char vocalPreferida; // solo puede almacenar un caracter

        // Asignamos valores
        nombre="Juan Perez";
        edad=45;
        esJubilado=false;
        salario=904.67f;
        vocalPreferida='a';
        // imprimimos en la consola 
        System.out.println("Sr."+nombre);
        System.out.println("Es Jubilado? "+esJubilado);
        System.out.println("Su salario es: "+ salario);
        System.out.println("Su vocal favorita es: "+ vocalPreferida);
    }

}


Descarga el proyecto desarrollado con Ide netbeans ejercicio1

martes, 13 de septiembre de 2011

Primer Programa Java

Pasos para generar el primer programa en Java.

  1. Crear un nuevo documento con el notepad
  2. Escribir el programa
  3. Guardar el documento
  4. Buscar el directorio donde se encuentra instalador el jdk
  5. abrir la linea de comandos, cmd
  6. compilar el programa
  7. ejecutar el programa
1.- Crear un nuevo documento con el notepad
Mediante un editor de texto como el notepad, notepadad++, etc. vamos a crear un nuevo documento de texto (aún no guardar dicho archivo).

2.- Escribir el programa
Mediante el empleo de la sintaxis del lenguaje Java, vamos a escribir nuestra clase con sus respectivos métodos, para nuestro ejemplo usaremos únicamente el método main.
import java.io.*;

class HolaMundo {

public static void main(String[] args){

System.out.println("MI primer programa, Hola mundo");

}

}
3. Guardar el documento
Debemos guardarloa al documento de la siguiente manera, en la barra de ingreso del nombre del archivo escribiremos el mismo nombre de la clase creada añadimos la extension .java, todo esto entre comillas dobles.
Para nuestro ejemplo, lo guarde en una carpeta en C:\java:
"HolaMundo.java"

4.- Buscar el directorio donde se encuentra instalador el jdk
generalmente se encuentra en C:\Program Files\Java\jdkx.xxxxx.

5.- abrir la linea de comandos, cmd
dirigirnos al directorio donde se encuentra instalado el jdk mediante el comando cd, como se puede ver en la figura 1.

6.- Compilar el programa, mediante el comando javac (observe la figura 1)

Figura 1: Busqueda de ubicación de jdk y compilación de archivo
pasos para compilar un programa java

7.- ejecutar el programa mediante el comando java (observe que no se escribe la extensión del archivo)

ejecucion del programa

sábado, 29 de enero de 2011

Descripción de la primera aplicación Android


Al igual que todas la aplicaciones desarrolladas en Java existe una serie de archivos, en este nuevo post describiré los archivos más importantes:

clase Activities: que se describio en el post anterior. 
archivo layout resource: cada pantalla tiene asociado un archivo de diseño.  
Si vemos el metodo onCreate en Ativities, encontramos la sentenciasetContentView(R.layout.main); la cual establece un argumento que nos dice que está sociado con el archivo de nombre main.xml y que se encuentra en el directorio /res/layout/
archivo AndroidManifest.xml: contiene parámetros propios de la aplicación como el nombre del paquete, el Activiti que iniciará la aplicación, la versión de la aplicación.
 
archivo strings.xml: existe valiables de la forma @string/hello o R.string.hello, donde hello representa el nombre de la variable y la definición la encontramos en el direcorio /res/values
 
R.java: este archivo se genera automaticamente.



Instalación

Para realizar la instalación debemos realizar los siguientes pasos:

1. Descargar e instalar el JDK
2. Descargar Eclipse
3. Descargar el SDK Android
4. Instalar el ADT plug-in para Eclipse
5. Configurar ADT plug-in con el path del SDK Android
6. Instalar componentes adicionales del Android SDK
7. Crear el Dispositivo Vitual de Android Virtual(AVD)
8. Configurar el JRE para usar en Eclipse

2. Descargar e instalar Eclipse
En la dirección http://www.eclipse.org/downloads/. descargar el entorno de programación, escoger el sistemas operativo en el cual va a desarrollar,  exisnten diferentes IDES, seleccione Eclipse para Desarrolladores JAVA.

3. Descargar el SDK Android

    Android dispositivos móviles

    Qué es Android?

    Qués es una Actividad?
    En Android una actividad es una clase, cada Acttivity respresenta una pantalla, haciendo una analogía sería una página JSP.

    Qué es OnCreate()?
    Es uno de los métodos que dispone la clase Activity, mismo que se ejecuta cuando se inicia la aplicación, haciendo uso de las funciones que provee el Sistema Android.

    Qué almacena el archivo AndroidManifest.xml?
    Este archivo entre las principales funciones tiene almacenado una descripción de cada una de las Actividades.
    Debe existir un punto de inicio, mismo que debe ser seleccionada de entre las actividades que posee nuestra aplicación. Generalmente el main de java.