bloque1:interfaces
Diferencias
Muestra las diferencias entre dos versiones de la página.
| bloque1:interfaces [2020/10/30 13:39] – [Usando Interfaces] fernando | bloque1:interfaces [2024/09/16 20:55] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 344: | Línea 344: | ||
| https:// | https:// | ||
| + | |||
| + | |||
| + | ===== Diseñadores de interfaces ===== | ||
| + | |||
| + | ==== WindowBuilder para Eclipse ==== | ||
| + | |||
| + | WindowBuilder es un plugin de código abierto para Eclipse destinado a crear interfaces gráficas de usuario (GUI) de forma rápida y sencilla. Como otros muchos sistemas de este tipo, contiene una paleta de elementos que podemos añadir mediante “drag and drop”, arrastrar y soltar. En lugar de tener que escribir el código a medida que vamos incluyendo elementos gráficos en nuestra ventana, WindowBuilder nos genera el código en nuestras clases. | ||
| + | |||
| + | Aunque WindowBuilder sea una herramienta de gran ayuda, necesitamos comprender la estructura con la que WindowBuilder crea clases para poder modificarla y darle un formato a las clases que nos ayude a separar y entender el programa. | ||
| + | |||
| + | === Instalación de WindowBuilder === | ||
| + | |||
| + | Para poder descargar WindowBuilder iremos en Eclipse a la pestaña '' | ||
| + | |||
| + | {{: | ||
| + | {{ : | ||
| + | |||
| + | Al terminar la instalación, | ||
| + | |||
| + | === Crear un proyecto con ventanas === | ||
| + | WindowBuilder está compuesto de varias herramientas para crear interfaces gráficas de usuario. Nosotros vamos a trabajar únicamente con los componentes [[https:// | ||
| + | Para ello usaremos la herramienta Swing Designer de WindowBuilder. | ||
| + | |||
| + | Por convenio, en Java una '' | ||
| + | |||
| + | |||
| + | **Creamos un proyecto** de la misma forma que lo hacemos siempre: | ||
| + | |||
| + | {{: | ||
| + | {{ : | ||
| + | |||
| + | **Creamos una clase JFrame** para una ventana. Dentro de nuestro proyecto, en algún '' | ||
| + | |||
| + | {{: | ||
| + | {{ : | ||
| + | ---- | ||
| + | |||
| + | También podemos acceder de forma rápida al menú de WindowBuilder mediante su nuevo botón, siempre seleccionando Swing como componentes gráficos: | ||
| + | |||
| + | {{: | ||
| + | {{ : | ||
| + | |||
| + | Una vez creada la clase nos aparecerá una nueva vista, desde la cual podemos acceder al código o al diseño a través de las pestañas inferiores. | ||
| + | |||
| + | {{: | ||
| + | {{ : | ||
| + | |||
| + | === 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 '' | ||
| + | |||
| + | {{: | ||
| + | {{ : | ||
| + | |||
| + | Por defecto toda aplicación **JFrame** emplea un JPanel principal de contenido // | ||
| + | |||
| + | {{ vimeo> | ||
| + | |||
| + | === Añadir manejadores de eventos === | ||
| + | {{ : | ||
| + | Para añadir un manejador de eventos a nuestra aplicación, | ||
| + | |||
| + | |||
| + | En algunos componentes deberemos crear un manejador de eventos para otro tipo de eventos ('' | ||
| + | |||
| + | {{ : | ||
| + | Cuando creemos un manejador de eventos, este se asociará al elemento sobre el cual se realiza el evento (p.e. botón). | ||
| + | Este código se creará justo debajo de la definición del componente, por lo que deberemos moverlo al lugar en el que lo queremos organizar (por ejemplo un método para inicializar los manejadores de eventos). | ||
| + | |||
| + | |||
| + | ==== UIDesigner para IntelliJ ==== | ||
| + | Cuando trabajamos con el IDE IntelliJ, también haremos uso de su diseñador de interfaces **UIDesigner**. La principal diferencia con WindowBuilder, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Este elemento posteriormente debemos añadirlo a un contenedor de alto nivel, usando el método setContentPane(). | ||
| + | |||
| + | Para crear una GUI utilizando IntelliJ, haremos lo siguiente: | ||
| + | - Ir a File -> New | ||
| + | - Seleccionar GUI Form (o Dialog) | ||
| + | - Dar nombre al formulario y seleccionar el Layout Manager | ||
| + | - 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. | ||
| + | |||
| + | {{ vimeo> | ||
| ===== Manejadores de Eventos ===== | ===== 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 ==== | ==== Eventos ==== | ||
| Línea 353: | Línea 440: | ||
| Para que nuestro programa pueda responder (ejecutar código) ante un evento, debemos usar un manejador de eventos. | 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). | + | 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> | <code java> | ||
| Línea 435: | Línea 522: | ||
| |WindowEvent|WindowListener|Al abrir o cerrar ventanas, o cambiar el icono|**windowActivated**(); | |WindowEvent|WindowListener|Al abrir o cerrar ventanas, o cambiar el icono|**windowActivated**(); | ||
| |FocusEvent|FocusListener|Cuando un elemento recibe el foco|**focusGained**(); | |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**(); | |ContainerEvent|ContainerListener|Cuando añado o quito elementos de un contenedor|**componentAdded**(); | ||
| |TableModelEvent|TableModelListener|Al modificar valores de celdas|**tableChanged**()| | |TableModelEvent|TableModelListener|Al modificar valores de celdas|**tableChanged**()| | ||
| Línea 440: | Línea 528: | ||
| |ChangeEvent|ChangeListener|Al realizar cualquier cambio en el elemento|**stateChange**()| | |ChangeEvent|ChangeListener|Al realizar cualquier cambio en el elemento|**stateChange**()| | ||
| |ComponentEvent|ComponentListener|Al cambiar la propiedad '' | |ComponentEvent|ComponentListener|Al cambiar la propiedad '' | ||
| - | ===== Diseñadores de interfaces ===== | ||
| - | |||
| - | ==== WindowBuilder para Eclipse ==== | ||
| - | |||
| - | WindowBuilder es un plugin de código abierto para Eclipse destinado a crear interfaces gráficas de usuario (GUI) de forma rápida y sencilla. Como otros muchos sistemas de este tipo, contiene una paleta de elementos que podemos añadir mediante “drag and drop”, arrastrar y soltar. En lugar de tener que escribir el código a medida que vamos incluyendo elementos gráficos en nuestra ventana, WindowBuilder nos genera el código en nuestras clases. | ||
| - | |||
| - | Aunque WindowBuilder sea una herramienta de gran ayuda, necesitamos comprender la estructura con la que WindowBuilder crea clases para poder modificarla y darle un formato a las clases que nos ayude a separar y entender el programa. | ||
| - | |||
| - | === Instalación de WindowBuilder === | ||
| - | |||
| - | Para poder descargar WindowBuilder iremos en Eclipse a la pestaña '' | ||
| - | |||
| - | {{: | ||
| - | {{ : | ||
| - | |||
| - | Al terminar la instalación, | ||
| - | |||
| - | === Crear un proyecto con ventanas === | ||
| - | WindowBuilder está compuesto de varias herramientas para crear interfaces gráficas de usuario. Nosotros vamos a trabajar únicamente con los componentes [[https:// | ||
| - | Para ello usaremos la herramienta Swing Designer de WindowBuilder. | ||
| - | |||
| - | Por convenio, en Java una '' | ||
| - | |||
| - | |||
| - | **Creamos un proyecto** de la misma forma que lo hacemos siempre: | ||
| - | |||
| - | {{: | ||
| - | {{ : | ||
| - | |||
| - | **Creamos una clase JFrame** para una ventana. Dentro de nuestro proyecto, en algún '' | ||
| - | |||
| - | {{: | ||
| - | {{ : | ||
| - | ---- | ||
| - | |||
| - | También podemos acceder de forma rápida al menú de WindowBuilder mediante su nuevo botón, siempre seleccionando Swing como componentes gráficos: | ||
| - | |||
| - | {{: | ||
| - | {{ : | ||
| - | |||
| - | Una vez creada la clase nos aparecerá una nueva vista, desde la cual podemos acceder al código o al diseño a través de las pestañas inferiores. | ||
| - | |||
| - | {{: | ||
| - | {{ : | ||
| - | |||
| - | === 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.** | ||
| - | |||
| - | {{: | ||
| - | {{ : | ||
| - | |||
| - | Por defecto toda aplicación **JFrame** emplea un JPanel principal de contenido // | ||
| - | |||
| - | {{ vimeo> | ||
| - | |||
| - | === Añadir manejadores de eventos === | ||
| - | {{ : | ||
| - | Para añadir un manejador de eventos a nuestra aplicación, | ||
| - | |||
| - | |||
| - | En algunos componentes deberemos crear un manejador de eventos para otro tipo de eventos (KeyEvent, StateChanged, | ||
| - | |||
| - | {{ : | ||
| - | Cuando creemos un manejador de eventos, este se asociará al elemento sobre el cual se realiza el evento (p.e. botón). | ||
| - | Este código se creará justo debajo de la definición del componente, por lo que deberemos moverlo al lugar en el que lo queremos organizar (por ejemplo un método para inicializar los manejadores de eventos). | ||
| - | |||
| - | |||
| - | ==== UIDesigner para IntelliJ ==== | ||
| - | Cuando trabajamos con el IDE IntelliJ, también haremos uso de su diseñador de interfaces **UIDesigner**. La principal diferencia con WindowBuilder, | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | Este elemento posteriormente debemos añadirlo a un contenedor de alto nivel, usando el método setContentPane(). | ||
| - | |||
| - | Para crear una GUI utilizando IntelliJ, haremos lo siguiente: | ||
| - | - Ir a File -> New | ||
| - | - Seleccionar GUI Form (o Dialog) | ||
| - | - Dar nombre al formulario y seleccionar el Layout Manager | ||
| - | - 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. | ||
| - | |||
| - | {{ vimeo> | ||
| ===== Patrón de diseño: Modelo-Vista-Controlador ===== | ===== Patrón de diseño: Modelo-Vista-Controlador ===== | ||
| Línea 529: | 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 659: | 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.1604065198.txt.gz · Última modificación: 2024/09/16 20:55 (editor externo)