bloque1:interfaces
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
bloque1:interfaces [2020/10/30 13:30] – [Tipos Eventos y Manejadores] fernando | bloque1:interfaces [2020/11/19 00:10] (actual) – [UIDesigner para IntelliJ] fernando | ||
---|---|---|---|
Línea 345: | Línea 345: | ||
https:// | https:// | ||
- | ===== Manejadores de Eventos ===== | ||
- | ==== Eventos ==== | ||
- | Un evento es una acción, provocada en la mayoría de los casos por el usuario, y que supone un cambio en el estado de algún componente (por ejemplo, botón). | ||
- | Los eventos, permiten llevar a cada la funcionalidad de las aplicaciones basadas en una GUI. | ||
- | |||
- | Para que nuestro programa pueda responder (ejecutar código) ante un evento, debemos usar un manejador de eventos. | ||
- | |||
- | El manejador de eventos es un objeto que implementa los métodos necesarios para responder a ciertos tipos de eventos. Por ejemplo, para responder a los eventos de tipo **ActionEvent** necesitamos un objeto que haya implementado el método actionPerformed(ActionEvent event). | ||
- | |||
- | <code java> | ||
- | public void actionPerformed(ActionEvent evento) | ||
- | //El código de este método se ejecuta cuando se poduce un evento | ||
- | } | ||
- | </ | ||
- | |||
- | Después debemos vincular los elementos gráficos que queremos que respondan a los eventos. Para esto añadimos el objeto manejador de eventos al componente que queramos. | ||
- | |||
- | <code java> | ||
- | JButton btnNuevo = new JButton(" | ||
- | btnNuevo.addActionListener(manejadorEventos); | ||
- | </ | ||
- | |||
- | Para tener un objeto que maneje eventos, podemos usar dos planteamientos: | ||
- | ==== Interfaces ==== | ||
- | |||
- | <code java> | ||
- | |||
- | public class ManejadorEventos implements ActionListener{ | ||
- | |||
- | ... | ||
- | // código de la clase | ||
- | |||
- | @Override | ||
- | public void actionPerformed(ActionEvent arg0) { | ||
- | // | ||
- | |||
- | } | ||
- | |||
- | } | ||
- | |||
- | </ | ||
- | |||
- | Una vez que tengamos una clase que sirva de manejador de eventos, asociamos un objeto de dicha clase a cada componente sobre el que queramos responder a sus eventos: | ||
- | <code java> | ||
- | |||
- | ManejadorEventos listener = new ManejadorEventos(); | ||
- | |||
- | boton.addActionListener(listener); | ||
- | |||
- | </ | ||
- | |||
- | **Esta forma es la más correcta.** | ||
- | ==== Clases Anónimas ==== | ||
- | |||
- | En alguna situaciones, | ||
- | |||
- | <code java> | ||
- | |||
- | JButton btnNuevo = new JButton(" | ||
- | |||
- | //Usamos una clase anónima que implementa la interface ActionListener | ||
- | btnNewNuevo.addActionListener(new ActionListener() { | ||
- | | ||
- | | ||
- | //código que se ejecuta al producirse el evento | ||
- | } | ||
- | }); | ||
- | |||
- | </ | ||
- | |||
- | Si nos fijamos, el parámetro que pasamos al método addActionListener() no es la variable que contiene el objeto de tipo ActionListener, | ||
- | |||
- | ==== Tipos Eventos y Manejadores ==== | ||
- | A continuación se indican los tipos de eventos más habituales y las interfaces que implementan métodos // | ||
- | |||
- | ^ Tipo Evento^Interface^Descripción^Métodos^ | ||
- | |ActionEvent|ActionListener|Al pulsar botones|**actionPerformed**()| | ||
- | |KeyEvent|KeyListener|Al pulsar teclas|**keyTyped**(); | ||
- | |ListSelectionEvent|ListSelectionListener|Al seleccionar o deseleccionar en una lista|**valueChanged**()| | ||
- | |WindowEvent|WindowListener|Al abrir o cerrar ventanas, o cambiar el icono|**windowActivated**(); | ||
- | |FocusEvent|FocusListener|Cuando un elemento recibe el foco|**focusGained**(); | ||
- | |ContainerEvent|ContainerListener|Cuando añado o quito elementos de un contenedor|**componentAdded**(); | ||
- | |TableModelEvent|TableModelListener|Al modificar valores de celdas|**tableChanged**()| | ||
- | |PropertyChangeEvent|PropertyChangeListener|Al cambiar alguna propiedad del elemento|**propertyChange**()| | ||
- | |ChangeEvent|ChangeListener|Al realizar cualquier cambio en el elemento|**stateChange**()| | ||
- | |ComponentEvent|ComponentListener|Al cambiar la propiedad '' | ||
===== Diseñadores de interfaces ===== | ===== Diseñadores de interfaces ===== | ||
Línea 479: | Línea 393: | ||
=== Ventana sin Layout Manager === | === Ventana sin Layout Manager === | ||
- | Para poder emplazar elementos en una ventana de cualquier tipo debemos indicar una organización (Layout). Si al principio no queremos complicarnos demasiado con un layout podemos trabajar de forma sencilla con **AbsoluteLayout**. Con este Layout podemos emplazar los elementos en el lugar que queramos, aunque no quedará tan bién a la hora de redimensionar la ventana. **Usando AbsoluteLayout los elementos se emplazan atendiendo a 4 coordenadas. Esto se desaconseja en el futuro, ya que no mantiene un orden al redimensionar la ventana.** | + | Para poder emplazar elementos en una ventana de cualquier tipo debemos indicar una organización (Layout). Si al principio no queremos complicarnos demasiado con un layout podemos trabajar de forma sencilla con '' |
{{: | {{: | ||
Línea 493: | Línea 407: | ||
- | En algunos componentes deberemos crear un manejador de eventos para otro tipo de eventos (KeyEvent, StateChanged, | + | En algunos componentes deberemos crear un manejador de eventos para otro tipo de eventos ('' |
{{ : | {{ : | ||
Línea 513: | Línea 427: | ||
- Marcar el checkbox **Create bound class**, e indicar el nombre | - Marcar el checkbox **Create bound class**, e indicar el nombre | ||
- | En la siguiente videoclase se enseña la creación de una aplicacion MVC desde 0, con el IDe IntelliJ. | + | En la siguiente videoclase se enseña la creación de una aplicacion MVC desde 0, con el IDE IntelliJ. |
{{ vimeo> | {{ vimeo> | ||
+ | |||
+ | ===== Manejadores de Eventos ===== | ||
+ | Una interfaz gráfica se maneja mediante eventos. Los eventos le indican al programa como debe actuar: qué codigo debe ejecutar. La parte del programa que está atenta de esos eventos se conoce como //manejador de eventos// o // | ||
+ | |||
+ | ==== Eventos ==== | ||
+ | Un evento es una acción, provocada en la mayoría de los casos por el usuario, y que supone un cambio en el estado de algún componente (por ejemplo, botón). | ||
+ | Los eventos, permiten llevar a cada la funcionalidad de las aplicaciones basadas en una GUI. | ||
+ | |||
+ | Para que nuestro programa pueda responder (ejecutar código) ante un evento, debemos usar un manejador de eventos. | ||
+ | |||
+ | El manejador de eventos es un objeto que implementa los métodos necesarios para responder a ciertos tipos de eventos. Por ejemplo, para responder a los eventos de tipo '' | ||
+ | |||
+ | <code java> | ||
+ | public void actionPerformed(ActionEvent evento) | ||
+ | //El código de este método se ejecuta cuando se poduce un evento | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Después debemos vincular los elementos gráficos que queremos que respondan a los eventos. Para esto añadimos el objeto manejador de eventos al componente que queramos. | ||
+ | |||
+ | <code java> | ||
+ | JButton btnNuevo = new JButton(" | ||
+ | btnNuevo.addActionListener(manejadorEventos); | ||
+ | </ | ||
+ | |||
+ | Para tener un objeto que maneje eventos, podemos usar dos planteamientos: | ||
+ | * utilizando una clase anónima que implemento el método **actionPerformed()** | ||
+ | * creando una clase concreta que implemente la // | ||
+ | |||
+ | ==== Usando Clases Anónimas ==== | ||
+ | |||
+ | En alguna situaciones, | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | JButton btnNuevo = new JButton(" | ||
+ | |||
+ | //Usamos una clase anónima que implementa la interface ActionListener | ||
+ | btnNewNuevo.addActionListener(new ActionListener() { | ||
+ | |||
+ | //Y por lo tanto está obligada a implementar sus métodos | ||
+ | | ||
+ | | ||
+ | //código que se ejecuta al producirse el evento | ||
+ | } | ||
+ | }); //Fin de la llamada al método addActionListener() | ||
+ | |||
+ | </ | ||
+ | |||
+ | Si nos fijamos, el parámetro que pasamos al método '' | ||
+ | |||
+ | ==== Usando Interfaces ==== | ||
+ | Cuando tenemos que manejar eventos en muchos componentes (varios botones, diferentes eventos, etc) **la forma más correcta** es crear una clase que actúe como manejador de eventos, de modo que podamos crear un objeto de dicha clase y el mismo objeto se encargue de atender todos los eventos (objeto listener). | ||
+ | |||
+ | Para ello debemos crear una clase que implemente las // | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | public class ManejadorEventos implements ActionListener{ | ||
+ | |||
+ | ... | ||
+ | // código de la clase | ||
+ | |||
+ | //Método de la interface ActionListener que se ejecutará al capturar un evento | ||
+ | @Override | ||
+ | public void actionPerformed(ActionEvent arg0) { | ||
+ | // | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Una vez que tengamos una clase que sirva de manejador de eventos, asociamos un objeto de dicha clase a cada componente sobre el que queramos responder a sus eventos: | ||
+ | <code java> | ||
+ | |||
+ | ManejadorEventos listener = new ManejadorEventos(); | ||
+ | |||
+ | boton.addActionListener(listener); | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Tipos Eventos y sus Interfaces Listener ==== | ||
+ | A continuación se indican los tipos de eventos más habituales y las interfaces que implementan métodos // | ||
+ | |||
+ | ^ Tipo Evento^Interface^Descripción^Métodos^ | ||
+ | |ActionEvent|ActionListener|Al pulsar botones|**actionPerformed**()| | ||
+ | |KeyEvent|KeyListener|Al pulsar teclas|**keyTyped**(); | ||
+ | |ListSelectionEvent|ListSelectionListener|Al seleccionar o deseleccionar en una lista|**valueChanged**()| | ||
+ | |WindowEvent|WindowListener|Al abrir o cerrar ventanas, o cambiar el icono|**windowActivated**(); | ||
+ | |FocusEvent|FocusListener|Cuando un elemento recibe el foco|**focusGained**(); | ||
+ | |MouseEvent|MouseListener|Cuando uso el ratón en algún componente|**mouseClicked**(); | ||
+ | |ContainerEvent|ContainerListener|Cuando añado o quito elementos de un contenedor|**componentAdded**(); | ||
+ | |TableModelEvent|TableModelListener|Al modificar valores de celdas|**tableChanged**()| | ||
+ | |PropertyChangeEvent|PropertyChangeListener|Al cambiar alguna propiedad del elemento|**propertyChange**()| | ||
+ | |ChangeEvent|ChangeListener|Al realizar cualquier cambio en el elemento|**stateChange**()| | ||
+ | |ComponentEvent|ComponentListener|Al cambiar la propiedad '' | ||
===== Patrón de diseño: Modelo-Vista-Controlador ===== | ===== Patrón de diseño: Modelo-Vista-Controlador ===== | ||
Línea 521: | Línea 533: | ||
Cuando se diseña una aplicacion aplicando el patrón de diseño // | Cuando se diseña una aplicacion aplicando el patrón de diseño // | ||
- | * La **vista** hace referencia a la ventana principal de la aplicación, | + | * La **vista** hace referencia a la ventana principal de la aplicación, |
- | * El **modelo** es la capa que contiene los datos de la aplicación y los gestiona. Es la que se encarga de satisfacer las peticiones del usuario que se indican en la vista. Recordemos que el usuario solo interactua con la vista. El modelo contiene todos los métodos para realizar las operaciones de nuestra aplicación. Dar de alta elementos, eliminar, buscar, guardar, cargar, etc. No tiene ninguna constancia | + | * El **modelo** es la capa que contiene los datos de la aplicación y los gestiona. Es la que se encarga de satisfacer las peticiones del usuario que se indican en la vista. Recordemos que el usuario solo interactua con la vista. El modelo contiene todos los métodos para realizar las operaciones de nuestra aplicación. Dar de alta elementos, eliminar, buscar, guardar, cargar, etc. Es completamente independiente |
- | * El **controlador** es la capa que comunica a las otras dos. Al llamar a su constructor, | + | * El **controlador** es la capa que comunica a las otras dos. Al llamar a su constructor, |
- | Resulta aconsejable que al menos las clases que representan | + | Resulta aconsejable que al menos las clases que representan la vista y el controlador **estén dentro del mismo paquete** ('' |
==== Vista ==== | ==== Vista ==== | ||
Línea 651: | Línea 663: | ||
@Override | @Override | ||
public void actionPerformed(ActionEvent evt) { | public void actionPerformed(ActionEvent evt) { | ||
+ | //El ActionCommand es una propiedad que se define en cada boton | ||
| | ||
+ | // | ||
| | ||
case " | case " |
bloque1/interfaces.1604064614.txt.gz · Última modificación: 2020/10/30 13:30 por fernando