Curso Manos a la Obra
Objetos: [Link] [Link] Patrones Objeto-relacionales: [Link] SWING: [Link] es/swing/[Link] Java SE 7 [Link]
Objetivo:
Dar a conocer a los participantes los conceptos bsicos del lenguaje de programacin JAVA, mediante la realizacin de ejercicios prcticos, utilizando NetBeans
Duracin:
48 hrs
Horario:
9 am 1 pm
Recesos:
11 am - 10 mins.
1. UML / JAVA
Implementacin en JAVA de relaciones entre objetos Herencia, Composicin, Agregacin, Relacin, Uso
2. Patrones estructurales objeto-relacionales
Mapeo en BD de clases Identity Field, Foreign Key Mapping, Association Table Mapping,
Embedded Value, Serialized LOB, Single Table Inheritance, Class Table Inheritance, Concrete Table Inheritance
3. Construyendo aplicaciones ([Link])
Qu es? / Qu incluye? Componentes de Swing Hola mundo manual/NetBeans Tipos de Layout Clases destacadas JPanel, JOptionPane, JMenu Eventos Consideraciones
Java Intermedio
Implementacin en Java de relaciones entre objetos
Uso Asociacin Agregacin Composicin Herencia
La
clase B necesita de un objeto de la clase A para llevar a cabo una funcionalidad En un mtodo de B, se crea un objeto auxiliar de A En un mtodo de B, aparece un objeto de A como parmetro
public class Cuenta { public long numero; private double saldo; public double interesAnual; public Cliente titular; public int retirar(double cantidad){ aux = new FileOutputStream(); //utilizar aux return 0; } public int depositar(double cantidad){ aux = new FileOutputStream(); //utilizar aux return 0; } }
Al menos un atributo de la clase B es una referencia a un objeto de la clase A La creacin de B no implica la creacin de A En UML se indican las cardinalidades Se implementa introduciendo referencias a objetos de la clase destino como atributos de la clase origen
public class Cuenta { public long numero; private double saldo; public double interesAnual; public Cliente titular; . . . public Cuenta(double s, Cliente t [Link] = s; [Link] = t; } . . . }
){
Normalmente la conexin entre los objetos se realiza recibiendo la referencia de uno de ellos en el constructor. Cuando la relacin es unidireccional, el objeto como atributo va en el lado de inicio de la flecha
public class Cliente { public String nombre; public String apellidoPaterno; public String apellidoMaterno; public String direccion; public String localidad; public date fechaNacimiento; public Cuenta[] misCuentas; private TarjetaCredito miTarjeta; : . public void setMiTarjeta( TarjetaCredito tc ){ miTarjeta = tc ; } : . }
Si
la cardinalidad es superior a 1 ser necesario utilizar un array, List, Vector Cuando la relacin es bidireccional, las cabezas de las flechas son opcionales y cada clase lleva un objeto como atributo de la otra clase.
public class Cliente { public String nombre; public String apellidoPaterno; public String apellidoMaterno; public String direccion; public String localidad; public date fechaNacimiento; public Cuenta[] misCuentas; private TarjetaCredito miTarjeta; public Cliente(){ //inicia variables con valores default } : . }
La
agregacin es una asociacin que se le aade el matiz semntico de que la clase de donde parte la relacin representa el TODO y las clases relacionadas las PARTES, pero NO TIENEN que existir para que el TODO exista La composicin es una agregacin donde la clase TODO controla la existencia de las clases PARTE, es decir que todas las PARTES SI TIENEN que existir para que exista el TODO
Al inicio TODO construye cada PARTE Al final TODO destruye cada PARTE
No hay implementacin especial, se tratan igual que las asociaciones
public class Aplicacion { private Codigo miCodigo; private BD miBD; public Aplicacion(){ miCodigo = new Codigo(); } public void Aplicacion(BD unaBD){ miCodigo = new Codigo(); setMiBD(unaBD); } public void setMiBD(BD newVal){ miBD = newVal; }
public class Cuenta { public long numero; private double saldo; public double interesAnual; public Cliente titular; public Movimiento[] misMovimientos; public Cuenta(){ misMovimientos = new Movimiento[10]; } . . . }
Permite que una clase obtenga la funcionalidad de otra, aadiendo nuevas caractersticas (atributos) y/o modificando su comportamiento o agregando nuevo comportamiento (mtodos) Se puede utilizar la herencia en diferentes situaciones: Especializacin Extensin Especificacin Construccin
Dado un concepto A y otro concepto B que representa una especializacin de A, entonces puede establecerse una relacin de herencia entre las clases de objetos que representan A y B
Una clase puede servir para extender la funcionalidad de una superclase sin que represente necesariamente un concepto mas especfico
Una superclase puede servir para especificar la funcionalidad mnima de un conjunto de descendientes
Una clase puede construirse a partir de otra, simplemente por que la hija puede aprovechar internamente parte o toda la funcionalidad de la clase padre
Java Intermedio
Guarda un campo ID de la BD en un objeto para mantener identidad entre un objeto en memoria y un registro de la BD
Mapea una asociacin entre objetos a una llave fornea entre tablas
Guarda la asociacin como una tabla con llaves forneas a las tablas correspondientes
Que una clase realice el mape en BD para una clase hija
Mapea un objeto en varios campos de la tabla de otro objeto
Guarda una jerarqua de objetos (grafo) serializndolos en un solo objeto grande (Large Object LOB), el cual lo guarda en BD
Representa una jerarqua de herencia de clases, como una sola tabla que tiene columnas para todos los campos de todas las clases
Representa una jerarqua de herencia de clases con una tabla para cada clase
Representa una jerarqua de herencia de clases con una tabla por clase concreta (no abstractas)
Java Intermedio
Es
un conjunto de clases que soporta una GUI independiente de plataforma Es un paquete parte de la JFC Es la sucesora de la AWT que no trabajaba muy bien y tena algunas dependencias de plataforma que la hacan difcil de utilizar
Widgets
visibles como los son:
Ventanas, Cuadros de texto, Botones, Tablas, Mens, etc
Contenedores
de componentes como:
Applets, Dilogos, Ventanas y Marcos
Clases
de soporte y mtodos de utileras
Basada en MVC
Modelo
guarda los datos usados para definir el componente Vista representa el despliegue visual del componente Controlador se encarga de lidiar con el comportamiento del componente, cuando el usuario interacta
JApplet JButton JCheckBox JColorChooser JComboBox JDialog JFileChooser JFormattedTextField JFrame JLabel JList JMenu JMenuBar JMenuItem JPanel
JPasswordField JPopUpMenu JProgressBar JRadioButton JScrollBar JSlider JSpinner JTable JTextArea JTextField JToggleButton JToolBar JTree JWindow
Contenedores Componentes Manejadores
de distribucin de elementos (Layout Managers)
Estn
hasta arriba en la jerarqua de contencin de la GUI. los componentes de la GUI son agregados a estos contenedores JDialog, JWindow y JApplet son los contenedores de mas alto nivel
Todos
JFrame,
Todos
los componentes de la GUI son derivados de la clase JComponent, por ejemplo JComboBox, JAbstractButton y JTextComponent
Son
responsables de acomodar y/o distribuir los componentes en un contenedor. BorderLayout, FlowLayout, GridLayout son algunos ejemplos de stos. Hay manejadores de Layouts mas complicados que proporcionan mas control sobre la GUI
Se clasifican en tres categoras
Top-level
containers General purpose containers Special purpose containers
La GUI de Swing utiliza dos tipos de clases Clases GUI, que son visuales y descendientes de JComponent, a veces se les llama J Classes Clases no-GUI o no visuales, se refiere a las clases que proveen servicios y funciones vitales para sus complementarias, sin embargo no producen resultados visuales
Se pueden clasificar de manera muy general en: Botones Componentes de texto Componentes de despliegue (no editables) Mens Componentes de despliegue formateado Otros controles
Propiedades comunes de todos Border Background and Foreground color Font Opaque Maximum / Minimum size Alignment Preferred size
Propiedades especficas de JComboBox (p.e.) Maximum row count Model Selected index Selected item Item count Renderer Editable
Su
funcin es determinar el tamao y posicin de un componente dentro de un contenedor. La alternativa a usar Layout Managers es utilizar posiciones absolutas mediante coordenadas de pixeles la desventaja es que no es multiplataforma
Situaciones con las que el Layout Manager debe lidiar: Cambiar de tamao el contenedor Tipos de letra y tamaos diversos usados por el usuario/S.O Requerimientos internacionales de acomodo de texto por la regin (izq-der / der-izq, vertical)
BorderLayout FlowLayout BoxLayout CardLayout GridLayout GridBagLayout
public class HolaMundo { public static void main(String[] args) { JFrame frame = new JFrame("HelloWorldSwing"); JLabel label = new JLabel("Hello World"); [Link]().add(label); [Link](); [Link](true); } }
Agregar un cuadro de dilogo para capturar informacin de un cliente
Nombre Direccin Ciudad Estado
SWING
los utiliza para comunicarse entre componentes Un evento es slo una llamada a un mtodo en el objeto receptor, por el objeto emisor lo que se transmite es un objeto Event Un objeto se registra para recibir eventos
En
SWING los eventos son multicast, es decir de un emisor a muchos receptores posibles El orden sin embargo, no es posible definirlo Los eventos son inmutables al receptor Se pueden encolar como los eventos del teclado Se pueden comprimir varios eventos en uno solo, como en los movimientos del mouse
Un
event source es el generador de un evento, por ejemplo el clic del mouse sobre un componente JButton, genera una instancia del evento ActionEvent, que contiene informacin de lo que acaba de suceder.
Es
el mtodo que recibe el objeto Event, lo descifra y procesa la interaccin del usuario.
Los
eventos son enviados al componente desde el cual fueron originados, pero es responsabilidad del componente propagar el evento a una o mas clases registradas, llamadas listeners. Los listeners contienen manejadores de eventos para recibir y procesar el evento. De esta forma pueden ser un objeto separado del componente
Los
objetos event se reportan solo a listeners registrados Cada event tiene una interface listener correspondiente que indica que mtodos deben estar definidos en la clase adecuada para recibir ese tipo de event Los objetos event de los componentes que no tienen objeto listener registrado NO son propagados
Muchas de las clases de los eventos residen en el paquete AWT, sin embargo en algunos otros lugares de la API existen otros.
Por
cada categora de eventos, una interface debe ser implementada por la clase de objeto que quiere recibir el evento. Esta interface exige que uno o mas mtodos sean definidos tambin.
Event Type ActionEvent AdjustmentEvent ItemEvent TextEvent ComponentEvent ContainerEvent FocusEvent KeyEvent MouseEvent WindowEvent
Event Source Button, List, MenuItem, TextField Scrollbar Choice, Checkbox, CheckboxMenuItem, List TextArea, TextField Component Container Component Component Component Window
Event Listener interface ActionListener AdjustmentListener ItemListener TextListener ComponentListener ContainerListener FocusListener KeyListener MouseListener, MouseMotionListener WindowListener
Event Listener interface ActionListener AdjustmentListener ItemListener TextListener
Event Listener Methods actionPerformed(ActionEvent evt) adjustmentValueChanged(AjustmentEvent evt) itemStateChanged(ItemEvent evt) textValueChanged(TextEvent evt) componentHidden(ComponentEvent evt), componentMoved(ComponentEvent evt), componentResized(ComponentEvent evt), componentShown(ComponentEvent evt)
ComponentListener
ContainerListener
componentAdded(ContainerEvent evt), componentRemoved(ContainerEvent evt) focusGained(FocusEvent evt), focusLost(FocusEvent evt) keyPressed(KeyEvent evt), keyReleased(KeyEvent evt), keyTyped(KeyEvent evt)
FocusListener KeyListener
Event Listener interface
Event Listener Methods
MouseListener
MouseMotionListener
WindowListener
mouseClicked(MouseEvent evt), mouseEntered(MouseEvent evt), mouseExited(MouseEvent evt), mousePressed(MouseEvent evt), mouseReleased(MouseEvent evt) mouseDragged(MouseEvent evt), mouseMoved(MouseEvent evt) windowActivated(WindowEvent evt), windowClosed(WindowEvent evt), windowClosing(WindowEvent evt), windowDeactivated(WindowEvent evt), windowDeiconified(WindowEvent evt), windowIconified(WindowEvent evt), windowOpened(WindowEvent evt)
El
framework AWT permite la coneccin de varios listeners al mismo componente El mecanismo del listener te permite llamar un mtodo addXxxListener() tantas veces como se necesite Y todos los listeners registrados deben llamar su mtodo manejador cuando el evento ocurra El orden en que se ejecutan los mtodos manejadores no est definido.
Es
laborioso implementar todos los mtodos de las interfaces listeners, particularmente MouseListener y WindowsListener. Por conveniencia JAVA provee clases adaptadoras que al heredarlas, nos provee los mtodos ya definidos, pero vacos, y nos permite solo redefinir el mtodo que vamos a ocupar.
Para
la ejecucin de aplicaciones GUI SWING, son necesarios varios hilos de ejecucin: Hilos responsables de ejecutar el cdigo de la aplicacin se les llaman current threads Hilos responsables de manejar los eventos generados por los componentes se les llama dispatch threads Hilos responsables de ejecutar operaciones largas como acceso a recursos compartidos, consultas o disco, se les llama worker threads (SwingWorker Class)
Para
la ejecucin de aplicaciones GUI SWING, son necesarios varios hilos de ejecucin: Hilos responsables de ejecutar el cdigo de la aplicacin se les llaman current threads Hilos responsables de manejar los eventos generados por los componentes se les llama dispatch threads Hilos responsables de ejecutar operaciones largas como acceso a recursos compartidos, consultas o disco, se les llama worker threads
Para
la ejecucin de aplicaciones GUI SWING, son necesarios varios hilos de ejecucin: Hilos responsables de ejecutar el cdigo de la aplicacin se les llaman current threads Hilos responsables de manejar los eventos generados por los componentes se les llama dispatch threads Hilos responsables de ejecutar operaciones largas como acceso a recursos compartidos, consultas o disco, se les llama worker threads
Esta
clase modela un imagen icono Imagen de tamao fijo regularmente pequea que se utiliza para decorar componentes de la GUI GIF, PNG, JPG y BMP son soportados Muchos JComponent aceptan un ImageIcon en su constructor o tienen un setter para l
Esta clase es diferente de otros componentes ya que normalmente el layout manager puede acomodar al componente en cuestin, excepto a JMenu, slo puedes agregar Mens a un Menu Container.
La excepcin a esta regla son los mens pop-up,
que como aparecen flotando no necesitan acomodo por parte del layout manager
Para crear un men: Crear un Objeto JMenuBar y establecerlo como menu container, como un JFrame Crear uno o mas objetos JMenu y agregarlos al objeto JMenuBar Crear uno o mas objetos JMenuItem, y agregarlos al objeto JMenu
El objeto JMenuBar no acepta listeners, todo deber ser manejado por los objetos JMenuItem
Se
pueden activar con el mouse o sin l mediante atajos del teclado Se pueden utilizar con texto o iconos o ambos Pueden tener varios iconos de acuerdo al estado:
defaultIcon, disabledIcon, pressedIcon, selectedIcon, rolloverIcon, disabledSelectedIcon, rolloverSelectedIcon
Botones
de comandos:
JButton
Botones
de alternancia (Toggle):
JRadioButton JCheckBox JToggleButton
Dispara
el evento ActionEvent a todos los listeners registrados
Te
permite escoger ninguno o uno del grupo. Tpicamente se agregan a un GroupButton para asegurar una seleccin mutuamente exclusiva Dispara el evento ItemEvent a los listeners registrados as como ActionEvent, y ambos puedes ser utilizados
Te
permite escoger ninguno o mas de entre el grupo Dispara ItemEvent y ActionEvent Normalmente se utiliza ItemEvent para poder distinguir entre los estados del Item SELECTED y DESELECTED
Normalmente
se usa para proporcionar un men desplegable Soporta seleccin sencilla y mltiple Recibe un array de objetos (tpicamente strings) que son la fuente de los Items desplegados Dispara ItemEvent y ActionEvent Se utiliza getSelectedIndex() para saber el Itemseleccionado Se utiliza getSelectedItem() para obtener el objeto seleccionado
JTextField,
JPasswordField, JFormattedTextField, para desplegar una sola lnea de texto, al igual que los botones disparan ActionEvent JTextArea: Para desplegar mltiples lneas de texto sin formato y editable JEditorPane, JTextPane: Un rea de texto con posibilidad de aplicar formatos y tipos de letra, as como imgenes y componentes embebidos. El primero soporta HTML