Herramientas de usuario

Herramientas del sitio


bloque4:organizargui

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque4:organizargui [12/05/2018 09:02] – [Ámbito de las variables de componentes] Fernando Valdeónbloque4:organizargui [16/09/2024 20:53] (actual) – editor externo 127.0.0.1
Línea 12: Línea 12:
  
 Para organizar las clases que creemos con WindowBuilder, debemos hacer 2 cosas:  Para organizar las clases que creemos con WindowBuilder, debemos hacer 2 cosas: 
-  - organizar el constructor en un par de métodos+  - organizar el código generado en el constructor en un par de métodos
   - eliminar el método main de esta clase   - eliminar el método main de esta clase
  
Línea 24: Línea 24:
 {{ :bloque4:organizarcodigo2.png?450 |}} {{ :bloque4:organizarcodigo2.png?450 |}}
  
-La finalidad de estos dos métodos es simplemente organizativa, y pueden nombrarse con cualquier otro identificador que creamos oportuno (initComponents, initHandlers, etc)+La finalidad de estos dos métodos es simplemente organizativa, y pueden nombrarse con cualquier otro identificador que creamos oportuno (initComponents, initHandlers, etc).
  
 **Estos dos métodos serán llamados por el constructor de la clase.** **Estos dos métodos serán llamados por el constructor de la clase.**
  
 ==== 2 - Eliminar el método main ==== ==== 2 - Eliminar el método main ====
-El método main generado por WindowBuilder usa hilos de ejecucióny no queremos usarlo. La ventana será creada desde un método main en otra clase, como por ejemplo:+El método main generado por WindowBuilder usa hilos de ejecución y no queremos usarlo; por lo tanto los borraremos**La ventana será creada desde un método main en otra clase**, como por ejemplo:
  
 <code java> <code java>
Línea 49: Línea 49:
 En la siguiente imagen hemos incluido un JButton (botón) y un JTextField (campo de texto). Si en el editor de WindowBuilder pulsamos con el botón derecho sobre el botón se nos desplegará el menu que vemos en la imagen.  En la siguiente imagen hemos incluido un JButton (botón) y un JTextField (campo de texto). Si en el editor de WindowBuilder pulsamos con el botón derecho sobre el botón se nos desplegará el menu que vemos en la imagen. 
  
-La mayor parte de las acciones que realizaremos sobre un elemento gráfico pueden responder al evento ActionPerformed, asi que con pulsar sobre dicho evento nos bastará. +La mayor parte de las acciones que realizaremos sobre un elemento gráfico pueden responder al evento ''ActionPerformed''así que con pulsar sobre dicho evento nos bastará. 
 {{ :bloque4:addeventhandler.png?400 |}} {{ :bloque4:addeventhandler.png?400 |}}
  
-En ese momento WindowBuilder nos habrá generado algo más de código en el método iniciarComponentes():+En ese momento WindowBuilder nos habrá generado algo más de código en el método ''iniciarComponentes()'':
  
 {{ :bloque4:addeventhandlercode.png?350 |}} {{ :bloque4:addeventhandlercode.png?350 |}}
  
-El código relativo a nuestros componentes se crea dentro del método ''iniciarComponentes()''. Los manejadores de eventos se crean justo debajo del elemento (botón en este caso) que los necesita, también dentro de ese método.+El código relativo a nuestros componentes se crea ahora dentro del método ''iniciarComponentes()''. Los manejadores de eventos se crean justo debajo del elemento (botón en este caso) que los necesita, también dentro de ese método.
  
-Si queremos organizar nuestro código de la forma mas clara posible debemos mover este código dentro del método que hemos creado para tal fin: +Si queremos organizar nuestro código de forma más clara debemos mover este código dentro del método que hemos creado para tal fin: 
  
 {{:bloque4:addeventhandlercode2.png?400 |}} {{:bloque4:addeventhandlercode2.png?400 |}}
 Además hemos incluido el código referente para mostrar un saludo en el campo de texto (variable textField). Además hemos incluido el código referente para mostrar un saludo en el campo de texto (variable textField).
  
-Si nos fijamos, la variable btnSaludar, está subrayada en rojo, debido a que hay un error. +Si nos fijamos, la variable **btnSaludar**, está subrayada en rojo, debido a que el compilador detecta un error. 
  
 Esto se debe a que la variable btnSaludar, no está creada (no existe) dentro del método iniciarManejadoresEventos(). Esto se debe a que la variable btnSaludar, no está creada (no existe) dentro del método iniciarManejadoresEventos().
  
-Dicha variable se ha creado en el método iniciarComponentes(), por lo que es una variable local de ese método, y solo puede ser accedida desde dicho método.+Dicha variable se ha creado en el método iniciarComponentes(), por lo que es una variable local ese método, y solo puede ser accedida (existe) desde dicho método.
  
 En el siguiente punto vamos a tratar el ámbito de las variables de una ventana. En el siguiente punto vamos a tratar el ámbito de las variables de una ventana.
Línea 73: Línea 73:
 ==== Ámbito de las variables de componentes ==== ==== Ámbito de las variables de componentes ====
 {{ :bloque4:localtofield.png?200|}} {{ :bloque4:localtofield.png?200|}}
-Debido a la organización de nuestro código en métodos, debemos tener en cuenta que muchas variables que crea WindowBuilder son locales al método y no serán visibles desde ningún otro a no ser que cambiemos su ámbito.+Debido a la organización de nuestro código en métodos, debemos tener en cuenta que muchas variables que crea WindowBuilder son locales (su ámbito es el método en el que se crean) y no serán visibles desde ningún otro método a no ser que cambiemos su ámbito.
  
 Desde la vista "Design" de WindowBuilder tenemos una sección para las propiedades de cualquier elemento gráfico: Desde la vista "Design" de WindowBuilder tenemos una sección para las propiedades de cualquier elemento gráfico:
Línea 83: Línea 83:
 Al pulsar este botón hacemos que una variable pase de ser variable local (solo existe en el método en el que se crea) a ser atributo de la clase (los atributos de la clase se definen al comienzo de la clase y son accesibles por todos los métodos). Al pulsar este botón hacemos que una variable pase de ser variable local (solo existe en el método en el que se crea) a ser atributo de la clase (los atributos de la clase se definen al comienzo de la clase y son accesibles por todos los métodos).
  
-{{:bloque4:localtofield3.png?50 |}}**Cuando el botón tiene esta imagen, la variable es local**, y al poner el ratón encima, nos dira //convertir de local a campo// (campo de la clase = atributo de la clase). Si lo pulsamos convertiremos la variable local en atributo de la clase (accesible desde toda la clase).+{{:bloque4:localtofield3.png?50 |}}**Cuando el botón tiene esta imagen, la variable es local**, y al poner el ratón encima del botón, nos dira //convertir de local a campo// (campo de la clase = atributo de la clase). Si lo pulsamos convertiremos la variable local en atributo de la clase (accesible desde toda la clase).
  
 Cuando una variable es local, solo existe en el método en el que se crea, por defecto en el método iniciarComponentes():{{ :bloque4:localtofield4.png?400 |}} Cuando una variable es local, solo existe en el método en el que se crea, por defecto en el método iniciarComponentes():{{ :bloque4:localtofield4.png?400 |}}
 Si nos fijamos la variable está declarada e inicializada (construida) en la misma línea. Si nos fijamos la variable está declarada e inicializada (construida) en la misma línea.
  
-{{:bloque4:localtofield5.png?50 |}}Cuando el botón tiene está forma, quiere decir que la variable es atributo de la clase. Por lo tanto podrá ser accedida por cualquier método de ella (por ejemplo desde el método iniciarManejadoresEventos(). Si pasamos el ratón por encima nos dirá lo contrario al caso anterior: "convertir de campo a local"+{{:bloque4:localtofield5.png?50 |}}**Cuando el botón tiene está forma, quiere decir que la variable es atributo de la clase**. Por lo tanto podrá ser accedida por cualquier método de ella (por ejemplo desde el método iniciarManejadoresEventos(). Si pasamos el ratón por encima nos dirá lo contrario al caso anterior: "convertir de campo a local"
  
 Cuando una variable es atributo de la clase está declarada al comienzo de la clase, y en el método **iniciarComponentes()**, solo se construirá el objeto. Cuando una variable es atributo de la clase está declarada al comienzo de la clase, y en el método **iniciarComponentes()**, solo se construirá el objeto.
Línea 95: Línea 95:
 {{:bloque4:iniciarcomponentes.png?300 |}}{{ :bloque4:iniciarcomponentes2.png?300 |}} {{:bloque4:iniciarcomponentes.png?300 |}}{{ :bloque4:iniciarcomponentes2.png?300 |}}
  
-Si nos fijamos en el método iniciarManejadoresEventos(), ya no tenemos problema a la hora de añadir el ActionListener (manejador de evento del raton) al botón que tenemos en la aplicación, ya que la variable btnSaludar es un atributo de la clase y puede ser accedida desde cualquier lugar.+Si nos fijamos en el método iniciarManejadoresEventos(), ya no tenemos problema a la hora de añadir el ActionListener (manejador de evento del raton) al botón que tenemos en la aplicación, ya que la variable btnSaludar es un atributo de la clase y puede ser accedida desde cualquier método de la clase.
  
-**Se ha de tener en cuenta que, cualquier elemento con el que queramos trabajar al que queramos añadir un manejador de eventos, debe ser atributo de la clase (Field).** +**Se ha de tener en cuenta que, cualquier elemento con el que queramos interactuar (como añadir un manejador de eventos o acceder al texto que contiene), debe ser atributo de la clase (Field).** 
  
 {{ vimeo>264758362?medium }} {{ vimeo>264758362?medium }}
  
 ===== Asociar nuestra ventana con nuestra aplicación ===== ===== Asociar nuestra ventana con nuestra aplicación =====
-Como hemos ido programando hasta ahora, hemos trabajado unicamente con la consola para la entrada de datos usando dos flujos: +Como hemos ido programando hasta ahora, hemos trabajado unicamente con la consola para la entrada/salida de datos usando dos flujos: 
-  - Entrada estándar: ''System.in'' +  - Entrada estándar: ''System.in'' (usada por método println()) 
-  - Salida estándar: ''System.out''+  - Salida estándar: ''System.out'' (usada por constructor de Scanner())
 Esos flujos ya no serán usados ya que ahora nos comunicaremos con el usuario a través de la interfaz gráfica ''GUI'' y sus componentes. Esos flujos ya no serán usados ya que ahora nos comunicaremos con el usuario a través de la interfaz gráfica ''GUI'' y sus componentes.
  
-__La forma más fácil de asociar mi ventana con mi programa es crear una instancia de mi programa en mi clase Ventana__:+__La forma más fácil de asociar mi ventana con mi programa es crear una instancia de mi programa en mi clase Ventana__.
  
 **Ejemplo**: Clase ''GestorEmpleados'', con los métodos para dar de alta empleados, buscarlos, eliminarlos, etc. Es acoplada a la clase Ventana. **Ejemplo**: Clase ''GestorEmpleados'', con los métodos para dar de alta empleados, buscarlos, eliminarlos, etc. Es acoplada a la clase Ventana.
Línea 114: Línea 114:
 public class Ventana extends JFrame{ public class Ventana extends JFrame{
  
-   //Atributos de la clase (componentes gráficos)+   //Atributos de la clase (componentes gráficos con los que interactuo de algún modo)
    private JTextField txtNombre;    private JTextField txtNombre;
    private JTextArea txtAClientes;    private JTextArea txtAClientes;
Línea 120: Línea 120:
    private JButton btnListarClientes;    private JButton btnListarClientes;
        
-   //Instancia de mi aplicacion+   //Referencia a mi aplicacion
    private GestorEmpleados gestor;    private GestorEmpleados gestor;
  
Línea 128: Línea 128:
       initEventHandlers();       initEventHandlers();
              
-      //Creo mi instancia +      //Instancio la referencia a mi aplicación 
       gestor = new GestorEmpleados();       gestor = new GestorEmpleados();
    }    }
        
    /*    /*
-     Código generado por cada manejador de eventos+     Método que incluye cada manejador de eventos
    */    */
    private void initEventHandlers(){    private void initEventHandlers(){
bloque4/organizargui.1526115779.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)