Mes: noviembre 2015

Repaso de Java Swing con Rally-Coach

Repaso de Java Swing con Rally Coach

En esta presentación podéis encontrar algunos ejercicios de repaso para realizar con la estructura de Aprendizaje Cooperativo llamada Rally-Coach.

Consiste en varias cartas (quitando la portada, las 8 primeras pueden imprimirse de 4 en 4 en dos páginas horizontales y las 8 últimas como reverso) que se reparten a parejas de alumnos (una baraja de 8 por cada pareja). El alumno que hace de Coach en primer lugar levanta una carta y realiza el ejercicio mientras explica a su compañero los pasos que va dando; éste asiente o corrige. Luego el alumno que ha hecho de Coach pasa a ser el que escucha, y el que escuchaba pasa a hacer de Coach, levantando otra carta y haciendo el ejercicio correspondiente.

Proyecto conjunto con GitHub y HR

Basándonos en el componente de acceso a datos de HR creado en el módulo Acceso a Datos, y poniendo en práctica todo lo aprendido hasta ahora con Java Swing debéis poneros de acuerdo para crear un equipo de desarrollo donde integréis todos los elementos utilizando el repositorio GitHub.

Los diferentes perfiles de desarrollo que utilizaréis son los siguientes:

  • Diseñador-programador (3 personas): es el trabajador encargado del diseño de los componentes de Java Swing de modo que todos tengan un aspecto y funcionalidad similar y cumplan con los estándares de usabilidad. No deben olvidar la asignación de nombres siguiendo los estándares para cada uno de los elementos (deben coordinarse para seguir la misma nomenclatura). Una vez diseñados estos componentes deberán continuar su trabajo de programadores.
  • Revisor-programador (3 personas): una vez desarrollados los componentes, se encargarán de comprobar que funcionan correctamente. Además, deben realizar la función de programadores.
  • Jefe de operación (3 personas): encargado de planificar el trabajo a realizar, la asignación de recursos humanos en cada puesto de trabajo y en cada momento. Además, realiza los procesos de programador.

 

Formulario de región

Cargar datos de una base de datos en un formulario

Mucho más sencillo que cargar datos de una tabla: para cargar datos de un formulario únicamente tendremos que ejecutar el método de consulta de datos de HR que necesitemos y mostrar dichos datos en los campos de texto correspondientes.

Al igual que en en caso anterior, dentro del método public nombreJPanel(), además de llamar al método initComponents; llamaremos a cargarFormulario(); El método cargar Formulario será público y no devolverá nada.

Finalmente, accedemos a la base de datos y ejecutamos el método que extraiga los datos de la misma. Cargamos cada dato en el campo de texto correspondiente y ¡listo!

public void cargarForm(){
   try {
      Hr hr = new Hr();
      Region r = hr.consultarRegion(Integer.parseInt("3"));
      this.txtPais.setText(r.getRegionName());
      this.txtCodigo.setText(String.valueOf(r.getRegionId()));
   } catch (ExcepcionHr ex) {
   System.out.println(ex.getMensajeErrorUsuario());
   }
}
JTable con datos de HR

Cargar datos de una base de datos en un JTable

Ya que en Acceso a Datos trabajamos con la base de datos HR, vamos a reuilizar uno de sus métodos para completar un jTable de nuestro formulario. Para ello debemos añadir en un JFrame un jTable y crearnos un modelo de datos de tipo DefaultTableModel en la clase de nuestro JFrame.

DefaultTableModel dtmModelo;

Además, dentro del método public nombreJPanel () además de llamar al método initComponents; llamaremos también a cargarTabla();

El método cargarTabla será público y no devolverá nada.

En primer lugar deberá definir el modelo DefaultTableModel para que no pueda ser editado por el usuario.

this.dtmModelo = new DefaultTableModel() {
   @Override
      public boolean isCellEditable(int fila, int columna) {
         return false; //Con esto conseguimos que la tabla no se pueda editar
      }
  };

A continuación asignamos dicho modelo a la tabla:

this.tblTabla = new JTable(dtmModelo);

Al modelo le añadimos los nombres de columnas que vamos a necesitar. En este caso, de Regiones tomaremos el ID y el nombre de la región.

this.dtmModelo.addColumn("ID");
this.dtmModelo.addColumn("Region");

Seguidamente realizamos la conexión a la base de datos HR y obtenemos, en este caso, el ArrayList de regiones que se lo asignaremos a una variable de tipo ArrayList.

Hr hr = new Hr();
ArrayList<Region> listaRegiones = hr.listarRegions();

Seguidamente hacemos un bucle para recorrer esta lista de regiones, definiéndonos una fila en la que indicaremos el número de columnas que vamos a utilizar y asignándole a las posiciones de la fila la información extraida del array. Finalmente, en cada pasada del bucle añadirmos la fila al modelo:

for (int i = 0; i < listaRegiones.size(); i++) {
   Object[] fila = new Object[2];
   fila[0]= listaRegiones.get(i).getRegionId();
   fila[1]= listaRegiones.get(i).getRegionName();
   this.dtmModelo.addRow(fila);
}

Para actualizar la información será necesario realizar el método updateUI a la tabla y a continuación ejecutar el método setViewportView del JScrollPane para actualizar la información que contiene.

this.tblTabla.updateUI();
this.scpScrollPane.setViewportView(tblTabla);

¡No olvides implementar el try-catch correspondiente! De lo contrario te dará error.

Buffered

Trabajando con ficheros y flujos de texto

Cuando necesitamos trabajar con archivos de texto es necesario utilizar flujos (buffers) de texto. En este caso vamos a ver en qué consisten las clases BufferedReader y BufferedWriter, ambas disponibles en la librería java.io y que debemos agregar a nuestro proyecto. Tanto BufferedReader como BufferedWriter nos permiten trabajar con archivos de texto línea a línea, en lugar de ir caracter a caracter, lo que optimiza su funcionamiento.

ESCRIBIR texto EN un fichero:

En primer lugar debemos elegir el fichero desde el que queremos leer el texto, que será un objeto de tipo File. Si este fichero lo extraemos de un JFileChooser podemos obtenerlo mediante:

File fichero = this.jFileChooser.getSelectedFile();

Seguidamente extraemos el flujo del fichero mediante las instrucciones:

BufferedWriter flujo = new BufferedWriter(new FileWriter(fichero)); //Abrimos el flujo
flujo.write(this.jEditorPane.getText()); //Escribimos lo que haya en el jEditorPane
flujo.close(); //Cerramos el flujo
LEER texto DE un fichero:

En primer lugar debemos elegir el fichero en el que queremos escribir el texto, que será un objeto de tipo File. Si este fichero lo extraemos de un JFileChooser podemos obtenerlo mediante:

File fichero = this.jFileChooser.getSelectedFile();

Seguidamente extraemos el flujo del fichero mediante las instrucciones:

BufferedReader flujo = new BufferedReader(new FileReader(fichero)); //Abrimos el flujo
String texto; //Definimos una cadena de texto que utilizaremos para leer líneas del fichero
while((texto = flujo.readLine()) != null) { //Mientras haya líneas en el fichero
    this.jEditorPane.setText(this.jEditorPane1.getText() + texto + "\n"); //Añadimos al panel
}
flujo.close(); //Cerramos el flujo

¡Ten en cuenta que, en ambos casos, hay que capturar la excepción “FileNotFoundException”!

JFileChooser

JFileChooser: eligiendo ficheros de nuestro equipo

JFileChooser nos permite abrir un cuadro de diálogo donde el usuario puede elegir un fichero a través del explorador de archivos de su equipo. Lo habitual es asociar este JFileChooser a un evento de un botón o de un menú y abrirlo con el método showOpenDialog.

El resultado de este método es un entero que devolverá lo que el usuario haya elegido, pudiendo ser:

  • JFileChooser.CANCEL_OPTION: si el usuario pulsa Cancelar.
  • JFileChooser.APPROVE_OPTION: si el usuario elige un fichero y pulsa el botón Aceptar.
  • JFileChooser.ERROR_OPTION: si ocurre un error.

El fichero elegido por el usuario se puede obtener en la variable de tipo fichero jFileChooser.getSelectedFile();

Así, podemos obtener un pequeño ejemplo de cómo funcionaría este elemento:

JFileChooser fc = new JFileChooser(); //Creamos un nuevo objeto JFileChooser
int seleccion = fc.showOpenDialog(this.EditorPane1); //Abrimos el JFileChooser y guardamos el resultado en seleccion
if (seleccion == JFileChooser.APPROVE_OPTION){ //Si el usuario ha pulsado la opción Aceptar
    File fichero = fc.getSelectedFile(); //Guardamos en la variable fichero el archivo seleccionado
}