Autor: laura

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
}

 

JScrollBar, JSlider, JSpinner

Ejercicio UT2-E8 Escalas con JScrollBar, JSlider y JSpinner

Ahora que conocemos el funcionamiento de JScrollBar, JSlider y JSpinner crea un JFrame con los tres elementos y un diseño similar a la captura que se muestra a continuación:

JScrollBar, JSlider, JSpinner
JScrollBar, JSlider, JSpinner

El funcionamiento será sencillo:

  • En el cuadro que se encuentra a la derecha del Slider se mostrará el valor del mismo de 0 a 100.
  • En el cuadro que se encuentra a la derecha de la barra de Scroll se mostrarán valores de 0 a 500.
  • Habrá un Spinner con fecha y hora que partirá de la fecha y hora actual.
  • Habrá otro Spinner que mostrará la fecha desglosada en tres campos, siendo el primero un valor del 1 al 31, el segundo de Enero a Diciembre, y el último de 1980 a 2100, comenzando por el año 2015.

Escalas: JScrollBar y JSlider

Los objetos JScrollBar y JSlider nos permiten crear escalas de un modo sencillo utilizando una barra con un elemento desplazable.

Para capturar el valor de dicha escala debemos modificar el evento StateChanged y obtener el atributo Value mediante el método getValue. Veamos un ejemplo:

private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {                                      
        System.out.println(String.valueOf(this.jSlider1.getValue());

Hay que tener en cuenta que el valor mínimo y máximo de estos elementos vendrán determinados por sus propiedades minimum y maximum; su valor inicial se indicará en la propiedad value; y en el caso del JScrollBar, habrá que contar con que la propiedad «VisibleAmount» deberá restarse del total de la escala, de tal manera que si nuestro JScrollBar tiene un mínimo de 0 y un máximo de 100, y su VisibleAmount es 10, la escala llegará del 0 al 90.