sábado, 25 de febrero de 2017

Introducción a Java: Interfaz Gráfìca de Usuario con Java Swing

Java Swing:
Es un componente usado par armar programas en modo "gráfico" basado en texto. La mayoría de las aplicaciones de uso empresarial usan este modo. Por ejemplo, Netbeans está programado con Swing.

Java FX:
Es un componente usado par armar programas en modo Gráfico. Será objeto de estudio en otra oportunidad.

Swing posee componentes (Boton, Campo de Texto, Etiqueta, etc), Contenedores (JFrame, JPanel, y otros contenedores de componentes)
Eventos que permiten interactuar con los usuarios. En Java, se representan a través de métodos, cada componente tiene sus propios eventos.
Por ejemplo, el evento más importante de un botón es mouseClicked; esto quiere decir que cuando el usuario presione el botón se llamará al método mouseClicked()

Pasos para comenzar a usar Swing con NetBeans:

1. Entrar a Netbeans, crear proyecto, quitar check a "Create Main Class"

2. En el menu de la izquierda, clic derecho en "default Package", elegir New-> JPanel:
 
  
3. El nombre debe ir con la primera en Mayuscula y el Paquete, sin mayuscula (ejemplo "gui")


4. Se ha creado el gui y dentro de ese packete está la Ventana.java
 

4. El editor de codigo es el siguiente:


Creacion de una ventana:

1. Crear un Label y ubicarlo manualmente en la pantalla:



2. Modificar las propiedades del Label, (Ejemplo, centrar, color, tipo de fuente, etc)

3. Separadores:


4. Agregar Textfields y botones:
Agregar Labels y TextFields necesarios.
Para el field de contraseña, debe usarse el "Password Field"

 
Password Field:


5. Modificar atributos deseados para texto, centrar, etc. 





6. Cambiar nombres de variables para los botones:
Esto nos facilita la identificación del botón cuando estemos trabajando en código:



Esta acción es recomendable repetir en todos los elementos que vayamos a programar desde código (ejemplo, botones, cajas de texto, contenido de información, etc)




Agregar comportamiento a botones en Java:
1. Doble clic en el botón. (Ejemplo limpiar) 
2. En el código asociado a ese botón, usaremos el metodo setText:

Al compilar debería ejecutarse la instrucción, al hacer clic en boton "limpiar" debería aparecer un texto llamado "hola"



Sin embargo, vamos a asignar las acciones que correspondan a lo que esperamos de los botones.

Ejemplo lògica Login:
Si el usuario != pepito -> Usuario incorrecto
Si no:
Si la contraseña no es "12345" -> contraseña incorrecta

Solución:

1. Vamos a usar el texto ingresado, guardarlo en un string. Para eso debemos declarar String para usar getText

2. Asignar lógica a las acciones del boton:



3. Solución a toda la lógica:


Nota:
En la línea 144, la palabra getText(); aparece "tachado", lo que básicamente es una recomendación de NetBeans para usar otro método diferente, (lo considera inseguro para campos de password).
El método recomendado es getPassword(). Sin embargo, necesitamos tener en cuenta que getPassword no funciona con strings. Funciona con Char  


Agregar eventos por teclado:


private void presionarTecla(java.awt.event.KeyEvent evt) { char tecla = evt.getKeyChar(); if (tecla=='\n'){ // este if permite hacer ALGO si el usuario pulsa tecla ENTER (ENTER ES \n). botonloginActionPerformed(null); //es el metodo que dispara toda la accion. pasamos "null" para pasar algo. (no se puede ejecutar sin pasar nada) } System.out.println(tecla); }







Ver código completo:


private void botonLimpiarActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: usuarioTextField.setText(""); //al hacer clic en el boton, se limpia contrasenaTextField.setText(""); //al hacer clic en el boton, se limpia } private void botonloginActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String usuario = usuarioTextField.getText(); char[] contrasena = contrasenaTextField.getPassword(); // tipo char para poder usar getPassword(); String contrasenaString = new String(contrasena); //creo un nuevo tipo de dato string a partir de un char if (usuario.equals("pepito")&& contrasenaString.equals("12345")){ informacionLabel.setText("Bienvenido pepito"); }else if (usuario.equals("pepito")) { informacionLabel.setText("Contraseña Incorrecta"); } else { informacionLabel.setText("Usuario incorrecto"); } } private void presionarTecla(java.awt.event.KeyEvent evt) { char tecla = evt.getKeyChar(); //permite capturar en la variable tecla, lo que esté capturando el teclado /*if (tecla=='a'){ // este if permite hacer ALGO si el usuario escribe alguna tecla (ejemplo "a"). System.out.println("hola"); } */ if (tecla=='\n'){ // este if permite hacer ALGO si el usuario pulsa tecla ENTER (ENTER ES \n). botonloginActionPerformed(null); //es el metodo que dispara toda la accion. pasamos "null" para pasar algo. (no se puede ejecutar sin pasar nada) } System.out.println(tecla); } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Ventana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Ventana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Ventana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Ventana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Ventana().setVisible(true); } }); }














































Tip: (Ctr + Espacio ayuda a escribir las instrucciones, métodos, etc)



No hay comentarios:

Publicar un comentario