jueves, 29 de marzo de 2012

Tutorial de Jtable (Operaciones sobre un Jtable)





Definición: Jtable es una clase que me permite organizar una determinada información en tabla, esta difiere de una base de datos normal porque al utilizar Jtable tu puedes visualizar esta tabla brindándole a el usuario organización de información, oportunidades de editar y cambiar el tamaño de las columna entre otras.

A continuación adjunto un materia en pdf aportado por Isaac Ruíz, montado en http://www.javahispano.org. que considero que todos los interesados en aprender a programar en Java deberíamos leer, y asi nos ahorrariamos muchos dolores de cabeza.

Como siempre deseando que el material les sea de gran utilidad.


Clic aquí para descargar material.



Sumando dos matrices regulares en Java





public class SumarMatriz{
 //Sumaremos dos matrices regulares de 5 X 5;
 public static void main(String []args){
  //creando y llenando nuestras dos matrices implicitamente.
  int [][]matriz1 = {{4,6,8,5,2},{4,9,8,7,2},
                    {6,5,4,20,8},{4,6,9,1,2},{4,7,8,5,1}};
  int [][]matriz2 = {{5,6,9,45,44},{1,4,25,3,9},
                    {7,8,45,6,32},{7,9,6,32,5},{4,5,8,6,3}};
  int [][]resultado = new int[5][5];//aqui guardaremos el resultado.
  /*la matriz resultado no es necesaria para mostrar el resultado
  ...pero aun asi la usaremos*/
  for(int filas = 0;filas < 5;filas++){
   for(int columnas = 0;columnas < 5;columnas++){
    //aqui las estamos sumando...
    resultado[filas][columnas] = matriz1[filas][columnas] + matriz2[filas][columnas];
   }
  }
  for(int filas=0;filas < 5;filas++){
   for(int columnas = 0;columnas < 5;columnas++){
    //aqui estamos imprimiendo la matriz resultado
    System.out.print(resultado[filas][columnas]+",");
   }
   System.out.println();//damos enter entre filas
  }
 }
}



Buscando en una matriz en Java





import java.util.Scanner;
public class BuscarEnMatriz{
 /*Llenaremos una matriz 10 X 10
   con numeros aleatorios del 1 al 100
   y buscaremos un valor dentro
   de la misma*/
 public static void main(String []args){
  Scanner in = new Scanner(System.in);
  int matriz[][]=new int[10][10];
  //llenamos nuestra matriz
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    matriz[filas][columnas]=1+(int)(Math.random()*100);;
   }
  }
System.out.println();//damos un enter
System.out.println("---Esta es nuestra matriz");
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    System.out.print(matriz[filas][columnas]+",");
   }
   System.out.println();//damos un enter
  }
System.out.println("---Digite un valor a buscar---");
int buscar = in.nextInt();
String coordenadas="";
//La busqueda es de manera iterativa
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    if(matriz[filas][columnas]==buscar){
     coordenadas+="["+filas+","+columnas+"]"+"\n";
     //'\n' me permite dar enter's(saltos de linea) dentro de la cadena;
    }
   }
  }

  if(coordenadas.equals("")){
   System.out.println("El valor "+buscar+" no existe en la matriz--");
  }else{
   System.out.println("El valor "+buscar+" esta en la(s) siguiente(s) coordenadas.");
   System.out.print(coordenadas);
  }
 }
}



Escribiendo y leyendo en un archivo.





import java.io.*;//necesario para trabajar sobre archivos
public class Archivo{
 public static void escribirArchivo(String nombre,String linea){
  //nombre es la ruta y nombre del archivo sobre el que deseamos trabajar
  //linea es la cadena que deseamos introducir en nuestro archivo
  File archivo = new File(nombre);
    try {
      FileWriter escribirArchivo = new FileWriter(archivo, true);
      //true para no modificar lo que ya estaba en el archivo, false para hacer lo contrario
      BufferedWriter buffer = new BufferedWriter(escribirArchivo);
      buffer.write(linea);
      buffer.newLine();
      buffer.close();//buena practica cerrar para liberar memoria
    }
    catch (Exception ex) {
      System.out.println("Error:"+ex);
     //En caso de haber error aqui se mostrará;
    }
 }
 public static String leerArchivo(String nombre){
  //nombre es la ruta y nombre del archivo sobre el que deseamos trabajar
  String retornado="";
  String linea="";
  File archivo = new File(nombre);
    try {
      FileReader leerArchivo = new FileReader(archivo);
      BufferedReader buffer = new BufferedReader(leerArchivo);
      while ((linea = buffer.readLine()) != null) {
        retornado+=linea+"\n";
      }
      buffer.close();
    }
    catch (Exception ex){
      System.out.println("Error:"+ex);/*en caso de haber error aqui se mostrará;
      aunque puedes mostrarlo con una ventana emergente o como quieras*/
    }
   return retornado;
 }
 public static void main(String args[]){
  escribirArchivo("/home/rey/Escritorio/MiArchivo.txt","Primer linea");
  /*
   *La estructura de la ruta '/home/...' es porque trabajo en linux...
   *pero si es en windows es algo asi como 'c/...'
  */
  escribirArchivo("/home/rey/Escritorio/MiArchivo.txt","Segunda linea");
  escribirArchivo("/home/rey/Escritorio/MiArchivo.txt","Tercera linea");
  //procedemos a leer directamente del archivo que hemos creado
  System.out.println(leerArchivo("/home/rey/Escritorio/MiArchivo.txt"));
 }
}



sábado, 24 de marzo de 2012

SQLite, Java y un ejemplo practico.





Al final Link para descargar código fuente.

Voy a  un ejemplo practico de como construir una simple aplicación haciendo uso de la seudobase de datos llamada SQLite usando java, donde tomare los datos de una persona (id, primer nombre, segundo nombre, primer apellido, segundo apellido) y los guardare en la tabla Persona de la base de datos, luego los mostraré en una JTable y por ultimo eliminaré todos los elementos de la tabla persona.

Lo curioso y practico de SQLite es que usa una base de datos en forma de archivo y puede hacer consultas en ella desde una aplicación java haciendo uso de SQL y ademas no es necesario instalar un motor de base de datos como PostgreSQL por ejemplo.

Definicion de SQLite: Es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente pequeña (~275 kiB)2 biblioteca escrita en C. SQLite es un proyecto de dominio público1 creado por D. Richard Hipp. mas informacion aqui.

Como nota importante -por lo menos para nosotros- esta herramienta está disponible para Java, cabe anotar que es usada por muchos software's actualmente.

Usaremos como herramientas Netbeans, Sqliteman y SqliteJDBC para Java, todo sobre GNU/Ubuntu, pero de igual forma lo podemos hacer en Windonws ya Sqliteman esta disponible para este.

Definición de JDBC: es una API que permite la ejecución de operaciones sobre bases de datos desde el lenguaje de programación Java, independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se accede, utilizando el dialecto SQL del modelo de base de datos que se utilice.

Definicion de SqlitemanUna excelente herramienta GUI para desarrolladores y administradores de bases de datos Sqlite disponible en múltiples plataformas.

Para la instalación de Sqliteman en Linux es muy fácil, ya que está presente en los repositorios de la mayoría de distribuciones, por ejemplo en GNU/Ubuntu lo podemos encontrar en 'Centro de software de Ubuntu'.

Para los que usan Windonws aquí esta el instalador de Sqliteman, clic aqui para descargar.

Para descargar el SqliteJDBC para Java, clic aqui para descargar.

Hosting
Hasta aqui asumo que tenemos conocimiento al menos básico del uso de Administradores de base de datos tradicionales como PostgreSQL, MySQL, entre otros.

Crearemos una base de datos usando Sqliteman llamada 'registro.db' muy sencilla compuesta por una tabla llamada 'Persona', así:


CREATE TABLE "Persona" (
    "id" INTEGER PRIMARY KEY,
    "primer_nombre" TEXT NOT NULL,
    "segundo_nombre" TEXT,
    "primer_apellido" TEXT NOT NULL,
    "segundo_apellido" TEXT
)


Lo que nos queda algo así:


-----------------------------------------------------------------
En Netbeans he creado un proyecto llamado ''ProyectoSQLite", y dentro tres paquetes, Operaciones, Objetos y Ventanas. 

En el paquete Operaciones (el paquete mas importante) existen dos clases, Conexion.java y Operaciones. java

En la clase Conexion.java tenemos el constructor y en ella inicializamos la variable ruta con la ruta donde se encuentra nuestro archivo base de datos.

public Conexion(){
 ruta = "/home/taniao/Escritorio/registro.db";
}

Nota: siempre debemos usar en la ruta '/' ya sea que estemos en Linux o Windows.

Finalmente para ésta clase tenemos el método conectar que como su nombre lo indica nos permitirá abrir conexión con la base de datos cada vez que la necesitemos.

try {
  Class.forName("org.sqlite.JDBC");
 }catch (ClassNotFoundException e) {
   JOptionPane.showMessageDialog(null, e.getMessage());
 }  
  try {
   conexion = DriverManager.getConnection("jdbc:sqlite:"+ruta);
   consulta = conexion.createStatement();
  }catch (SQLException e) {
  JOptionPane.showMessageDialog(null, e.getMessage());
  }
}





Por otra parte en la clase Operaciones.java tenemos dos importantes métodos, insertar y consultar; al ser básicos nos permitirán desarrollar muchas más funcionalidades en la clase Operaciones.java; para efectos de ésta pequeña explicación solo almacenaremos Personas y mostraremos un listado de las misma.

public boolean insertar(String sql){
 boolean valor = true;
  conectar();
  try {
   consulta.executeUpdate(sql);
  } catch (SQLException e) {
   valor = false;
   JOptionPane.showMessageDialog(null, e.getMessage());
  }      
  finally{  
   try{    
    consulta.close();  
    conexion.close();  
   }catch (Exception e){                 
     e.printStackTrace();  
   }  
  }
  return valor;
}

public ResultSet consultar(String sql){
 conectar();
 ResultSet resultado = null;
 try {
  resultado = consulta.executeQuery(sql);
 }catch (SQLException e) {
  JOptionPane.showMessageDialog(null, ""+e.getMessage());
 }
  return resultado;
}

----------------------------------------------
Para terminar y para que todo funcione necesitamos el JDBC llamado sqlitejdbc-v056.jar que ya descargamos (si no es aquí esta de nuevo el Link) para podernos comunicar con la base de datos.

Descomprimimos sqlitejdbc-v056.jar y dentro de éste encontramos una carpeta llamada 'org', allí es donde está toda la implementacion de sqlite; copiamos esta carpeta a nuestro proyecto junto con los tres paquete que hemos creados (OperacionesObjetos y Ventanas) y listo.

Nota: Si no queremos hacer el paso anterior podemos importar toda la librería sqlitejdbc-v056.jar usando Netbeans.
----------------------------------------------
He aquí pantallazos de la aplicación.





Como siempre deseándoles les sea de utilidad.

Para descargar codigo fuente hecho en Netbeans, clic aqui.
Para descargar la base de datos hecha en Sqliteman, clic aqui.

Hosting

Comenta acerca del código.

viernes, 16 de marzo de 2012

Instalación de Netbeans en GNU/Debian, GNU/Ubuntu u otra distribución afín.





La instalación de Netbeans al igual que otros programas es muy fácil actualmente en GNU/Linux, aquí la explicación.


Primero: Abrimos la pagina oficial de Netbeans "http://www.netbeans.org/" en nuestro navegador favorito.


Segundo: Hacemos clic en el botón grande que dice "Download FREE", lo cual nos llevara al siguiente pantallazo.

Tercero: Hasta aquí solo debemos darle clic en cualquiera de los botones que aparecen abajo de cada columna; pero observemos que podemos decidir las tecnologías que deseamos agregar entre los que tenemos, NetBeans Platform SDK, Java SE, Java FX, Java EE, Java ME, C/C++, Groovy, PHP; y ademas también podemos incluir los servidores web GlassFish Server Open Source Edition 3.1.2 y Apache Tomcat 7.0.22 estos dos últimos nos servirán si estamos trabajando aplicaciones web.

Cuarto: Debemos tener presente que en "Plataforma" tengamos seleccionado la opción "Linux (x86/x64)"; para efectos de esta pequeña explicación usaremos el ultimo botón de izquierda a derecha, para hacer la instalación con todas las tecnologías y servidores disponibles.





Quinto: Al hacer clic en nuestro botón, nos mostrara una ventana como la siguiente.

Sexto: Unas vez aceptado y descargado nuestro .sh, que para este caso se llama netbeans-7.1.1-ml-linux.sh; asumiré que los descargamos en la carpeta "Descargas".

Septimo: Abrimos la consola y nos ubicamos en la carpeta Descargas así:

cd Descargas

Una vez allí digitamos:

sudo sh netbeans-7.1.1-ml-linux.sh

Luego de introducir la contraseña seguimos se ejecutara nuestro script, al final nos mostrara un Gui agradable que nos guiará en el proceso de instalación.

Si no nos funciona sudo sh netbeans-7.1.1-ml-linux.sh; probemos como:

sudo ./netbeans-7.1.1-ml-linux.sh

Saludos, espero les sea de utilidad.

martes, 21 de febrero de 2012

Construya su propia computadora (implementacion de Simpletron).





Abajo Link para descargar código fuente.



Este es el titulo de un ejercicio que ví propuesto en el libro "Como programar en Java, 5ta edicion pagina 294" y que nos lleva a la implementacion de un sistema llamado Simpletron para la ejecucion de ordenes estilo ensamblador, la implemetacion es bastante basica, pero me gusta mucho y quiero aqui compartir con ustedes.

Aqui esta el link para que lean las especificaciones que aparecen en ellibro.

Les resumo que, el programa esta dotado de una memoria que almacena maximo 100 numeros enteros (en el libro llamados palabras), ademas de una variable llamada acumulador de tipo entero; en la memoria almacenamos ordenenes compuestas por un numero de 4 digitos (palabras) donde los dos primeros representan un codigo de operacion y los dos numeros restantes operando, ejemplo 1011 asi:

|10|11|

 |  |
 |  +--- operando
 +--- Codigo de operacion

Claro que el ejercicio propuesto no termina alli, pues en los ejercicios 20.26 y 20.27 del mismo libro proponen crear con este un compilador para un lenguaje de alto nivel; en la medida de lo posible estare gastandole algo de tiempo al ejercicio.

Al final expongo la implementacion que hice para ustedes, aunque no lo hice a cabalidad como el libro lo pide, empezando en que no use aplet para escribir un codigo mas simple.


Hosting
 

Los codigo de operacion son los siguiente (Sugeridos en el libro)

Operaciones de entrada/salida:
10:Lee una palabra desde el teclado y la introduce en una ubicación específica dememoria.
11:Escribe una palabra de una ubicación específica de memoria y la imprime en lapantalla.


Operaciones de carga/almacenamiento:
20:Carga una palabra de una ubicación específica de memoria y la coloca en elacumulador.
21:Almacena una palabra del acumulador dentro de una ubicación específica dememoria.


Operaciones aritméticas:
30:Suma una palabra de una ubicación específica de memoria a la palabra en elacumulador (deja el resultado en el acumulador).:
31:Resta una palabra de una ubicación específica de memoria a la palabra en elacumulador (deja el resultado en el acumulador).:
32:Divide una palabra de una ubicación específica de memoria entre la palabra enel acumulador (deja el resultado en el acumulador).
33:Multiplica una palabra de una ubicación específica de memoria por la palabra enel acumulador (deja el resultado en el acumulador).


Operaciones de transferencia de control:
40:Bifurca hacia una ubicación específica de memoria.
41:Bifurca hacia una ubicación específica de memoria si el acumulador es negativo.
42:Bifurca hacia una ubicación específica de memoria si el acumulador es cero.
43:Alto. El programa completó su tarea.





Pasos para pedir dos numero enteros, sumarlos y mostrar el resultado;
1010 (Pedir un numero y guardarlo en memoria en la posicion 10)
1011
(Pedir un numero y guardarlo en memoria en la posicion 11)
2010 (Cargar lo que este en la posicion 10 de la memoria al acumulador)
3011 (Sumar lo que este en la posicion 11 y el acumulador, el resultado se guardara en el acumulador)
2112 (Almacenar lo que este en el acumulador a la memoria en la posicion 12)
1112; (Imprimir lo que este en la memoria en la posicion 12)

Nota: ver que la ultima instrucion termina en punto y coma ';'

Pantallazo de la aplicación:



--------------------------------------------------------------------------------------------------
Hallar el mayor de tres numeros;
1020
1021
1022
2020
3121
4109
2020
2123
4011
2021
2123
3122
4115
1123
4300
1122;

Nota: ver que la ultima instrucion termina en punto y coma ';'

Codigo fuente clic aqui.


Hosting

Comenta acerca del código.

Entrada destacada

Matriz de adyacencia para un grafo

"La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias."; aunque pa...