UNIDAD I - Interfaces Gráficas de Usuario

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 120

Programación Orientada a o

Objeto

UNIDAD I. Interfaz Gráfica de


Usuario (IGU)
TIPOS DE PROGRAMAS EN JAVA

Aplicaciones

Tipos:
- Modo consola
1) Interacción mediante el teclado
2) La interfaz esta basada en texto
-Aplicaciones con interfaz gráfica
1) Ventanas, botones, cajas de texto, tablas, imágenes, etc.
2) Iconos
3) Programación orientada a eventos.

Applets
Pequeños programas que se ejecutan dentro de un navegador.
Concepto

Entendemos por Interfaz Gráfica de Usuario(IGU) al


software que permite la interacción entre usuario y los
servicios que proporciona el sistema operativo.

La aparición de las IGU fue posible gracias a los grandes


recursos de las computadoras, antes de los 70 era
imposible desperdiciar CPU en las interfaces gráficas de
usuario.

3
Alto (1973) desarrollado por Xerox PARC, fue
la primera computadora que incorporaba
ratón y un sistema operativo con una interfaz
gráfica de usuario.

Xerox 8010 Star (1981) El primer sistema


que se le denominó computador de
escritorio integrado con aplicaciones.

4
Alto (1983) También llamado Lisa
OS, fue desarrollado por Apple
con la intención de ser una
estación de trabajo para procesar
documentos.

Visi On (1984) fue la primera GUI


desarrollada para los PC IBM. La
GUI hacía uso de un mouse, tenía
un instalador incluido y un sistema
de ayuda que no usaba íconos.

5
En 1985 Microsoft sacó Windows
1.0, el primer sistema operativo
basado en una GUI. El sistema
presentaba íconos de 32×32
píxeles y gráficos de color. La
característica más interesante
fue el ícono del reloj análogo
animado.

6
PROGRAMACIÓN GUI EN JAVA

Los programas de hoy en día proveen un Interfaz Gráfica de Usuario a


través de la cual un usuario interactúa con el programa.

Para el diseño de aplicaciones que utilicen interfaces gráficas


(ventanas con controles, etiquetas, cajas de texto, botones, etc), java
proporciona una biblioteca de clases denominada JFC(Java Fundation
Class).

7
PROGRAMACIÓN GUI EN JAVA

La cual proporciona dos APIs: AWT y Swing

AWT(Abstract Windows Toolkit): Es un kit de herramientas de ventanas


abstractas. Algunas de las clases de AWT son las siguientes:

• Applet: Crear un applet.


• Button: Crear un botón.
• Canvas: crear un área de trabajo donde se pueda dibujar.
• Checkbox: Crear una casilla de activación.
• Choise: Crear un control de activación.
• Label: crea un etiqueta
• Menu: crea un menú
• ComboBox: Crear un cuadro de listas desplegables.
• List: Crea un cuadro de lista
• Frame, Dialog, Panel, TextArea, TextField,etc.
8
Componentes y contenedores
Los componentes son los
elementos gráficos básicos que
permiten al usuario interactuar
con la aplicación.

Los contenedores contienen y


organizan la situación de los
componentes. También son en
sí mismos componentes, por lo
que pueden ser situados dentro
de otros contenedores.

9
Gestores de disposición

10
Ejemplo AWT Importamos las
clases awt
import java.awt.*;
import java.awt.event.*;

public class AppFrame {


public AppFrame(){
//creamos etiqueta,botón y el frame
Frame miFrame=new Frame("Ejemplo de AWT");
Label miEtiqueta=new Label("Hola grupo 6D");
Button miBoton = new Button( "Aceptar" );
//usamos gestor de componentes en fila
miFrame.setLayout(new FlowLayout());
//agregamos los componentes al Frame
miFrame.add(miEtiqueta);
miFrame.add(miBoton);
miFrame.setSize(250,150);
miFrame.setVisible(true);
//Gestionamos los eventos
miFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);}
});
miBoton.addActionListener(new ActionListener() {
public void actionPerformed( ActionEvent evt ) {
miFrame.dispose();}
});
} 11
}
public class EjemploAWT {
public static void main(String[] args) {
AppFrame f = new AppFrame();
}
}

12
Jerarquía de clases de AWT

13
Swing: (Standard Widget Toolkit) Conjunto de componentes para
diseñar interfaces gráficas de usuario.

Se pueden distinguir los componentes swing con respecto a AWT con


el nombre, debido a que swing inicia los nombres de los tipos de
componentes con “J”, por ejemplo:

• JFrame,
• JLabel
• JTextBox

14
Jerarquía de clases de SWING

15
Componentes contenedores de Swing

JFrame: Ventana básica que puede


contener otros componentes(Jbutton,
Jlabel,JTextField,etc).

JOptionPane: Se les denomina JFrame


restringidos, y sólo sirven para pedir
alguna confirmación, realizar
advertencias, notificar errores.

16
Componentes contenedores de Swing

JInternalFrame: Ventanas hijas que no


pueden salir del ámbito de la ventana
principal (JFrame).

JPanel: Su funcionalidad es la de
agrupar y organizar otros componentes.

JScrollPanel: Permite visualizar un


componente de tamaño mayor que la
ventana disponible, mediante el uso de
barras de desplazamiento.
17
JSplitPane: Permite dividir la ventana , de tal
manera que pueda haber dos componentes
distintos de cada lado, con la posibilidad de
modificar la cantidad de espacio.

JTabbedPane: Permite dividir la ventana en


varias pestañas que pueden contener
controles.

JToolBar: Permite crear una barra de


herramientas utilizando iconos.

18
Controles básicos de Swing
JCheckBox,JRadioButton,JButton: Distintos
tipos de botones, marcar una casilla,
escoger entre varias opciones, botón
respectivamente.

JComboBox: Las listas desplegables te


permiten seleccionar una opción entre
varias.

JList: Lista con ScrollBar que permite


seleccionar una opción entre varias.

19
Controles básicos de Swing
JTextField, JFormattedTextField y JPasswordField:
Variantes de editores, el primero recibe un texto sin
restricciones, el segundo permite indicar el conjunto
de caracteres legales y finalmente el tercero
muestra el mensaje oculto.

JMenuBar: Las listas desplegables te


permiten seleccionar una opción entre
varias.

20
Controles especializados de Swing

JColorChooser: Control que muestra la paleta de


colores.

JFileChooser: Permite abrir un cuadro


de diálogos para pedir un archivo, de
acuerdo al filtro establecido.

21
Ventana con Swing sin extender de JFrame

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class FrameSwing {

public FrameSwing(){
JFrame frame =new JFrame("Ventana de Swing");
JButton miBoton=new JButton(“Aceptar");
JLabel etiqueta=new JLabel("Hola Grupo");
frame.setLayout(new FlowLayout());
frame.add(miBoton);
frame.add(etiqueta);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
public static void main(String[] args) {
FrameSwing ventana=new FrameSwing();
}

}
22
Eventos en Java

Todos los componentes de IGU en java pueden generar


eventos, ya sea acciones del usuario sobre el componente,
temporizaciones, cambios de estados, etc.

Debe de haber un generador del evento y un oyente.

23
Tipos de eventos en Java
Evento Significado
ComponentEvent Cambio de tamaño, posición o visibilidad de un
componente
FocusEvent Cambio de foco
KeyEvent Operación con el teclado
MouseEvent Operación con el mouse
WindowEvent Cambio de estado de la ventana
ActionEvent Realización de la acción específica asociada al
componente
ChanceEvent Cambio del estado del componente
CaretEvent Cambio en la posición del cursor de inserción en un
componente que gestiona texto.
ListSelectionEvent Cambio en la selección actual de una lista.
24
Oyentes de eventos en Java(Listeners)

Son objetos que implementan la interfaz correspondiente al


tipo de evento a escuchar:

•ActionListener
•WindowListener
•MouseListener
•etc

25
Ejemplo: “Pulsame”. Creamos una clase llamada
EjemploEvento que herede de la clase
JFrame.
import java.awt.event.*;
import javax.swing.*;
En el constructor mandamos a llamar el
public class EjemploEvento extends JFrame{ método initComponentes”, el cual nos
private int numeroClick; inicializará todos los componentes.
public EjemploEvento(){
initComponentes();
}
private void initComponentes(){ En el método initComponentes
setSize(300,100); inicializaremos las propiedades de cada
text = new JTextField("0",20); componente, como por ejemplo:
text.setEditable(false); 1)La caja de texto(JTextField) estará
button = new JButton("Pulsame!!");
button.addMouseListener(new MyClickListener()); inicializada con “0” y tamaño 20.
panel = new JPanel(); 2) Escucharemos al botón cuando
panel.add(text); mande el evento “MouseEvent”.
panel.add(button); 3) Agruparemos todos los componentes
setContentPane(panel);
setVisible(true); en un Panel(Jpanel).
} 4) Finalmente haremos visible la
private class MyClickListener extends MouseAdapter{ ventana.
@Override
public void mouseClicked(MouseEvent evt){ numeroClick++;
text.setText(String.valueOf(numeroClick));
} Sobreescribimos el evento
} “MouseClicked” , de tal manera que
cuando se de click en el botón se
private JPanel panel;
private JTextField text; incremente una variable “numeroClick” y
private JButton button; lo visualizamos en el área de texto.
}
26
En la clase principal “main” instanciamos
Ejemplo: “Pulsame”. la clase “EjemploEvento” y ejecutamos el
programa.

public class Main {

public static void main(String[] args) {


EjemploEvento gui = new EjemploEvento();
}

27
Los programadores de la “vieja escuela” todavía siguen
haciendo las cosas a “manita”, sin embargo en la
actualidad no se tiene la suficiente paciencia para el
desarrollo de interfaces gráficas es por eso que se crearon
los IDEs los cuales cuentan con una paleta de
herramientas de componentes que nos facilitan el
desarrollo.

NetBeans

28
Paleta de
componentes
gráficos.

Área de diseño
de la interfaz
gráfica

Propiedades de
los componentes. 29
¿Como utilizar NetBeans?

30
Ejemplo Swing: Convertidor Celsius a Fahrenheit

Creamos un nuevo
proyecto”Aplicación Java” y
damos clic en siguiente.

31
Ejemplo Swing: Convertidor Celsius a Fahrenheit

Asignamos el nombre del


proyecto: “ConvertirGrados”
y damos clic en Terminar.

32
Ejemplo Swing: Convertidor Celsius a Fahrenheit

Agregamos un
“Formulario JFrame”
al proyecto.

33
Ejemplo Swing: Convertidor Celsius a Fahrenheit

Asignamos el nombre al
formulario:”JFrame” y
damos clic en terminar.

34
Ejemplo Swing: Convertidor Celsius a Fahrenheit

En la ventana de
propiedades asignamos
el título al JFrame:
Convertidor Grados.

35
Ejemplo Swing: Convertidor Celsius a Fahrenheit

Podemos agregar un
JPanel (borde) para
agrupar los componentes,
en la propiedad “border” del
JPanel y escoger la opción
borde con título, entonces
le agregamos el titulo
Celsius a Fahrenheit.

36
Ejemplo Swing: Convertidor Celsius a Fahrenheit

Diseñar el Jframe con


los siguientes
componentes :

2 JLabel
2 JTextField
2 JButton

37
Ejemplo Swing: Convertidor Celsius a Fahrenheit

Generamos el
evento para los dos
botones.

38
Ejemplo Swing: Convertidor Celsius a Fahrenheit

En el método del
evento será donde
vamos a realizar las
conversiones de
celsius a fahrenheit.

39
Ejemplo Swing: Convertidor Celsius a Fahrenheit

Crear una clase


llamada
“GradosCelsius.java”
en donde
implementaremos los
métodos para
convertir celsius a
fahrenheit.

40
Ejemplo Swing: Convertidor Celsius a Fahrenheit

En los métodos de los


botones “calcular” y “salir”,
realizamos las
implementaciones
correspondientes en cada
caso.

En el caso del evento del


botón “calcular” realizamos
la instancia a la clase
GradosCelsius y le
pasamos el parámetro que
se captura en la jTextField.

En el evento del botón


“salir” le escribimos la
instrucción para salir de la
ventana.

41
Ejemplo Swing: Visor de imágenes con JRadioButton

Construyamos ahora una aplicación en


donde apliquemos el control de
jRadioButton.

Diseñemos un JFrame que contenga


los siguientes componentes :

4 jRadioButton: con sus respectivos


nombres.

1 Jlabel: sin texto

42
Ejemplo Swing: Visor de imágenes con JRadioButton

Creamos un paquete nuevo al


que le denominaremos
“Imágenes”, en donde
cargaremos todas las imágenes
que utilizaremos en esta práctica.

43
Ejemplo Swing: Visor de imágenes con JRadioButton

En el Jlabel en la propiedad de
Icon damos clic en el botón
con los tres puntos.

44
Ejemplo Swing: Visor de imágenes con JRadioButton

Seleccionamos el paquete que


previamente construimos llamado
“Imágenes”.

En la carpeta del proyecto, buscar la


carpeta del paquete “Imágenes”, que se
encuentra en la carpeta src/imágenes.

Copie las imágenes: gato.png,


perro.png, oso.png y perico.png.

45
Ejemplo Swing: Visor de imágenes con JRadioButton

Observar que en el paquete


Imágenes, ya se encuentran
cargadas las imágenes
correspondientes.

46
Ejemplo Swing: Visor de imágenes con JRadioButton
En el constructor de la clase
Jframe creamos un grupo de
radio botones con la clase
ButtonGroup, de tal manera
que sólo podamos
seleccionar un solo radio
botón.

También establecemos al
Jlabel, el cual tiene por
nombre de variable
“Imagen”, el método setIcon
le damos la ruta en donde
se encuentra la imagen
“gato.png”.

Observe que llamamos el


método “CreateImageIcon”.

47
Ejemplo Swing: Visor de imágenes con JRadioButton

Implementamos el
método createImageIcon
para verificar si existe la
imagen dentro del
paquete, en caso de que
no exista la imagen
mandaría un mensaje de
error.

48
Ejemplo Swing: Visor de imágenes con JRadioButton

En cada evento
asignamos la
correspondiente
imagen

49
Ejemplo Swing: Visor de imágenes con JRadioButton

La salida del programa


será la siguiente, cada vez
que se selecciona una
opción del radio botón
mostrará la imagen
correspondiente.

50
Ejemplo Swing: Visor de imágenes con JComboBox

Podemos hacer lo mismo


con el control JComboBox

51
Ejemplo Swing: Visor de imágenes con JComboBox
De la misma manera que en
el ejemplo con jRadioButton
creamos un nuevo proyecto y
agregamos dos paquetes uno
“src” , el cual contendrá un
formulario Jframe, otro
paquete llamado imágenes,
el cual contendrá las
imágenes.

El diseño del Jframe es el


siguiente:

1 Jlabel donde
visualizaremos las imágenes.

1 JComboBox el cual tendrá


las opciones
correspondientes a cada
imagen.

52
Ejemplo Swing: Visor de imágenes con JComboBox

En las propiedades del


componente JComboBox
modificamos la propiedad
“model” y agregamos las
opciones, es importante
que sean los mismos
nombres de las imágenes.

53
Ejemplo Swing: Visor de imágenes con JComboBox

Podemos probar la vista


previa de la interfaz y
observar que tenemos las
opciones que le
agregamos.

54
Ejemplo Swing: Visor de imágenes con JComboBox

Damos clic derecho en el


control y le generamos su
evento.

55
Ejemplo Swing: Visor de imágenes con JComboBox
En la clase JFrame
agregamos un arreglo tipo
String el cual tendrá los
nombres de cada imagen.

En el evento del
JComboBox nuevamente
utilizamos el método
“setIcon” para visualizar la
imagen.

Observe que utilizamos el


arreglo de cadenas
previamente declarado el
cual recibe de índice la
opción seleccionada por el
control jComboBox (el
método que nos devuelve
el índice es
"getSelectedIndex”.
56
Otra manera es obtener el ítem seleccionado en el jComboBox utilizando el
método getSelectedItem, el método nos devuelve el nombre como objeto por
lo que debemos convertirlo a cadena con toString().

private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
Imagen.setIcon(CreateImageIcon("imagenes/"+jComboBox1.getSelectedItem().toString()+".png"));
}

57
Seleccionamos en
Categorías: “Java”

En Proyectos:
“Aplicación Java”

Clic en botón
“Siguiente”

58
Asignamos nombre
al proyecto: “ElejirColor”

Quitamos la selección
de clase principal.

Damos clic en el botón


“Terminar”

59
En el proyecto creamos
un Formulario Frame

60
Ejemplo de jColorChooser en NetBeans.

En la paleta de
herramientas
seleccionamos un botón
y un área de texto y
arrastramos a nuestro
JFrame.

61
Ejemplo de jColorChooser en NetBeans.

De la Paleta seleccionamos
el componente “Selector de
color” y lo arrastramos al
área blanca del proyecto.

62
Ejemplo de jColorChooser en NetBeans.

Para generar un
evento en el botón
damos clic en el
botón derecho del
mouse: Eventos-
>Action-
>actionPerformed.

63
Ejemplo de jColorChooser en NetBeans.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:

JColorChooser elejircolor = new JColorChooser();


color = elejircolor.showDialog(null,"Seleccione color", color.WHITE);
jTextArea1.setBackground(color);

1) En el método del evento del botón tenemos


que instanciar la clase JColorChooser.
2) Declarar una variable privada tipo color al
principio de la clase Jframe, la cual
denominaremos “color”: Color color;
3) Asignamos a la variable color la elección del
control jColorChooser.
4) Al control jTextArea le asignamos al fondo el
color seleccionado.
64
Ejemplo de jColorChooser en NetBeans.

Al dar clic en el botón


seleccione color debe de
generarse el evento que
mande a llamar el
componente jColorChooser.

65
Ejemplo de jColorChooser.

La salida del programa


mostrará el color de fondo
del jTextArea, al color
elegido previamente.

Ejercicio: Agregue color al


texto utilizando el método
setForeground.

66
Ejemplo Swing: Manejo de múltiples Frames

Creamos un nuevo
proyecto”Aplicación Java” y
damos clic en siguiente.

67
Ejemplo Swing: Manejo de múltiples Frames

Asignamos el nombre del


proyecto:
“MultiplesFrames”,
deshabilitamos la casilla
“Crear clase principal” y
damos clic en Terminar.

68
Ejemplo Swing: Manejo de múltiples Frames

Agregamos un
“Formulario JFrame”
al proyecto.

69
Ejemplo Swing: Manejo de múltiples Frames

Asignamos el nombre al
formulario:”VentanaPrincipal”
y damos clic en terminar.

70
Ejemplo Swing: Manejo de múltiples Frames

Creamos dos frames


más, uno llamado
“Ventana1” y otro
llamado “Ventana2”

71
Ejemplo Swing: Manejo de múltiples Frames

Establecemos las siguientes


propiedades a todos los frames:

*Mostrar la ventana centrada en la


pantalla
setLocationRelativeTo(null);

*Evitar que la ventana cambie de


tamaño
setResizable(false);

*Establecer un título para la


ventana
setTitle("Ventana Principal");

72
Ejemplo Swing: Manejo de múltiples Frames

En el frame
“VentanaPrincipal”,
dibujamos dos
botones, uno con
el texto “Ventana
1” y el otro con el
texto “Ventana 2”

73
Ejemplo Swing: Manejo de múltiples Frames

En el frame “Ventana1”,
insertamos un jLabel con
el texto “Te encuentras en
ventana 1” y un jButton
con el texto “Regresar a
principal”.

74
Ejemplo Swing: Manejo de múltiples Frames

En el frame “Ventana2”,
insertamos un jLabel con
el texto “Te encuentras en
la ventana 2” y un jButton
con el texto “Regresar a
principal”.

75
Ejemplo Swing: Manejo de múltiples Frames

En el frame
“VentanaPrincipal”
generamos el evento
para los dos botones.

76
Ejemplo Swing: Manejo de múltiples Frames

En el método que maneja el


evento para el botón
“Ventana1”, instanciamos a la
clase Ventana1
Ventana1 obj=new Ventana1();

y establecemos la propiedad
setVisible a “true” para
visualizar la ventana

77
Ejemplo Swing: Manejo de múltiples Frames

En el método que maneja el


evento para el botón
“Ventana2”, instanciamos a la
clase Ventana2
Ventana2 obj=new Ventana2();

y establecemos la propiedad
setVisible a “true” para
visualizar la ventana

78
Ejemplo Swing: Manejo de múltiples Frames

Al ejecutar la aplicación
seleccionamos el frame
“VentanaPrincipal” como clase
principal.

79
Ejemplo Swing: Manejo de múltiples Frames

Al ejecutar la
aplicación
observarán que las
ventanas aparecen
traslapadas

80
Ejemplo Swing: Manejo de múltiples Frames

Utilizamos el método
dispose() para que la
ventana actual se
destruya cuando se
abra una nueva

81
Ejemplo Swing: Manejo de múltiples Frames

Generamos el
evento para el botón
“Regresar a
principal” tanto en la
ventana1 como en la
ventana2

82
Ejemplo Swing: Manejo de múltiples Frames

En el método que
maneja el evento,
creamos una instancia
a la clase de la
“VentanaPrincipal”,
establecemos como
visible a
VentanaPrincipal y
usamos el método
dispose() para terminar
a la ventana que se
encuentra en ejecución.

83
Ejemplo Swing: Manejo de múltiples Frames,
utilizando la barra de menú

En la ventana principal
insertamos un
componente jMenuBar.
Modificamos su

84
Ejemplo Swing: Manejo de múltiples Frames,
utilizando la barra de menú

Modificamos el texto del


primer ítem a
“Aplicaciones”.
Eliminamos el segundo
ítem llamado Edit

85
Ejemplo Swing: Manejo de múltiples Frames,
utilizando la barra de menú

Agregamos dos
elementos al menú
“Aplicaciones”,
pulsamos botón
derecho sobre el ítem
“Aplicaciones” y
seleccionamos del
submenú “Añadir de
paleta”, “Elemento de
menú”.

86
Ejemplo Swing: Manejo de múltiples Frames,
utilizando la barra de menú

Añadir dos elementos al


menú “Aplicaciones”

87
Ejemplo Swing: Manejo de múltiples Frames,
utilizando la barra de menú

Editamos el texto de los


elementos a “Ventana
1” y “Ventana 2”. Para
ello pulsamos click
derecho sobre el
elemento y elegimos la
opción “editar texto”

88
Ejemplo Swing: Manejo de múltiples Frames,
utilizando la barra de menú

Generamos eventos
para cada uno de los
elementos

89
Ejemplo Swing: Manejo de múltiples Frames,
utilizando la barra de menú

En los métodos
manejadores de los
eventos escribimos el
mismo código que
utilizamos para el
manejo de las ventanas
por medio de botones.

90
Ejemplo Swing: Manejo de múltiples Frames,
utilizando la barra de menú

91
Recursos

JTable
https://www.youtube.com/watch?v=6GMdqSO7OnQ
https://www.youtube.com/watch?v=jPfKFm2Yfow
https://www.youtube.com/watch?v=ANWmfnT2zb4

JFreeChart
https://www.youtube.com/watch?v=4ijB9BAFuIw
https://www.youtube.com/watch?v=zS8pW1lPk5k
https://jonathanmelgoza.com/blog/como-hacer-graficos-con-java/
Progress Bar
https://www.youtube.com/watch?v=-1LiUiYcWW0

92
Uso del componente JTable
Proceso para agregar a una tabla
1.- Establecer el modelo
JTable TabEmpleados=new JTable();
DefaultTableModel modeloT=new DefaultTableModel();
TabEmpleados.setModel(modeloT);
2.- Agregar columnas y títulos a la tabla
modeloT.addColumn("Nombre");
modeloT.addColumn("Direccion");
modeloT.addColumn("Edad");
Object[] columna=new Object[3];
3.-

93
Patrones de Diseño

94
Patrones de Diseño

Son herramientas que brindan solución a problemas reiterativos de


diseño que se presentan en el desarrollo de software. Los patrones de
diseños son reusables y adaptables a diferentes problemáticas.

Los patrones de diseño que implementaremos serán:

• Singleton
• MVC(Modelo Vista Controlador)
• DAO(Data Access Object)

95
Patrón Singleton

• Este patrón es de los más comunes en el desarrollo de


software debido a la facilidad de implementación.
Básicamente se encarga de crear una instancia única
de la clase para toda la aplicación de manera que solo
exista un punto de acceso global al objeto creado.
• Para implementarlo, se debe tener un constructor
privado al que se accederá solo desde la misma clase,
así como un método estático que permita el acceso a
dicha instancia de la
forma ClaseSingleton.getInstanciaSingleton();
• Este patrón es muy útil cuando necesitamos crear un
clase común y global para todo el sistema, donde no
nos interese crear varias instancias de la misma

96
Ejemplo Singletón
Paso de objetos entre frames

Diseñar un Jframe
que contenga los
botones que se
muestran

97
Crear una clase llamada
controladora, en esta se
definirá nuestro patrón de
diseño singleton que nos
permitirá pasar entre los
diferentes Jframes nuestro
ArrayList.

98
• Crear un evento para el botón “Llenar arreglo con datos”
• En el método del evento, escribir el siguiente código

Se obtiene la
instancia a
nuestra clase
controladora

después de llenar nuestro


ArrayList con datos, le
pasamos a la clase
controladora esta
información a través del
método setDatos
99
Creamos un nuevo
Jframe (subventana), el
cuál estará compuesto
de un JTextArea (donde
se mostrarán los datos
que contiene el arreglo)
y un botón.

100
Asociamos un evento al botón visualizar, para que al pulsarlo aparezcan
todos los datos almacenados en el arreglo en el JTextArea

Se obtiene la
instancia a
nuestra clase
controladora

Se obtienen los datos a


través del método getDatos
definido en nuestra clase
controladora

101
Regresamos a la ventana
principal y asociamos un
evento al botón Visualizar
datos para que el
pulsarlo se muestre la
subventana diseñada
anteriormente

102
Patrón de Diseño MVC (Modelo-Vista-Controlador)

• Creada en 1979 por Trygve Reenskaug


• Permite separar las interfaces gráficas (GUI) de
los datos y de la lógica utilizando tres
componentes:
➢MODELO: Representa la información y los
datos procesados por el sistema, gestionando
la forma como se accede a éstos y la lógica
de negocio de la aplicación (mundo del
problema).
➢VISTA: Representa la parte visual de la
aplicación, en ella se establecen todas las
interfaces gráficas de usuario (ventanas) las
cuales mostrarán la información del modelo
en un formato adecuado para permitir la
interacción con el usuario.
➢CONTROLADOR: En este se define la lógica
de administración del sistema, establece la
conexión entre la vista y el modelo.

103
Comunicación entre las capas del MVC

1.- Capa Vista: Usuario realiza alguna acción a


través de la interfaz gráfica
2.-Capa Controlador:
• Recibe el evento provocado por la acción del
usuario
• Realiza la gestión del evento y accede a la
capa del modelo
• Da la orden a la vista para que se actualice
con los datos
3.-Capa Vista: Se actualiza con los datos que
llegan como resultado de la acción del usuario,
generalmente el controlador envía los datos del
modelo a la vista (cuando la vista no tiene
acceso al modelo).

104
Diagrama de clases ejemplo MVC

105
106
Patrón DTO o VO (Value Object)

El acrónimo DTO son las siglas en inglés de Data


Transfer Object, cuyo significado en español se
traduce como Objetos de Transferencia de Datos.

El patrón DTO tiene como finalidad de crear un


objeto plano (POJO) con una serie de atributos que
puedan ser enviados o recuperados en una sola
invocación, de tal forma que un DTO puede
contener información de múltiples fuentes o tablas y
concentrarse en una única clase simple.

107
Patrón de Diseño DAO

El patrón Arquitectónico Data Access Object


(DAO) proporciona algunas operaciones de datos
específicos sin exponer a los detalles de la base de
datos. Este patrón permite centralizar los procesos
de acceso a la BD, de manera que independizamos
la lógica de negocio con la lógica de acceso a datos

108
MVC-DAO-VO(DTO)

109
CONEXIÓN A BASE DE
DATOS EN MYSQL

110
¿Qué es JDBC?
(Java Data Base Connection)

En un API (colección de interfaces y clases abstractas) incluido dentro del lenguaje Java
para el acceso a bases de datos relaciones. JDBC está escrito completamente en Java
por lo que es independiente de la plataforma, es decir, puede manejar BD de Oracle,
sybase, SQL Server, mysql, etc.

Tareas que realiza:

• Establecer una conexión con una BD


• Enviar sentencias SQL
• Manipular los datos
• Procesar los resultados de la ejecución de las sentencias.

111
Las interfaces de JDBC se encuentran integradas en los paquetes:
• java.sql
• Javax.sql

Adicionalmente también se necesita un driver JDBC, que es una


implementación de dichas interfaces. Este driver es específico para
cada gestor de BD, en el caso de MySQL es MySQL Connector/J.

Clases e interfaces principales de JDBC:


o java.sql.DriverManager
o java.sql.Connection
o java.sql.Statement
o java.sql.ResultSet
o java.sql.PreparedStatement
o javax.sql.DataSource
112
Pasos a seguir para realizar la conexión a la BD

Paso 1.- Descargar el JDBC driver para MySQL.


✓ Descargarlo desde la página https://www.mysql.com/products/connector/
seleccionar Plataforma independiente para el sistema operativo

✓Una vez descargado se debe descomprimir


✓Agregar el archivo .jar que se encuentra dentro de la carpeta de
archivos al paquete libraries del proyecto

113
Paso 2. Crear la cadena de conexión a la BD:
La clase DriverManager permite obtener objetos Connection con la base de datos.
Para conectarse es necesario proporcionar:
• URL de conexión, que incluye:
✓ Nombre del host donde esta la base de datos, si es nuestra propia máquina será localhost
✓ Nombre de la base de datos a usar.
✓ Puerto por donde escucha el servidor de BD, por defecto para MySQL es el 3306
• Nombre del usuario en la base de datos.
• Contraseña del usuario en la base de datos.
Métodos sobrecargados para getConnection
• getConnection(String url)
• Connection getConnection(String url, Properties info)
• Connection getConnection(String url, String user, String
password)

Ejemplo de conexión:
static String bd = "bdempleado";
static String login = "root";
static String password = "";
static String url =
"jdbc:mysql://localhost:3306/"+bd+"?useUnicode=true+use"+"JDBCCompliantTimezoneShift=true&useLe
gacyDatetimeCode=false&"+"serverTimezone=UTC";

Connection conex = DriverManager.getConnection(url,login,password);


114
Paso 3. Realizar operaciones en la Base de datos

➢ Utilizando Statement: actúa como un contenedor para ejecutar sentencias


SQL sobre una base de datos.

Se obtienen a partir de un objeto Connection. Dispone de distintos métodos


para hacer consultas:

✓ Método executeQuery: usado para leer datos, normalmente mediante


consultas SELECT.

✓Método executeUpdate: usado para insertar, modicar o borrar datos,


normalmente mediante sentencias INSERT, UPDATE y DELETE.
Además, también se utiliza para sentencias DDL (Data Definition
Language, lenguaje de definición de datos) de SQL, tales como CREATE
TABLE y DROP TABLE.
115
El metodo executeQuery devuelve un objeto de tipo ResultSet, que dará acceso a los
resultados de la consulta que se haya ejecutado.
El objeto ResultSet representa el resultado de una consulta:
• Esta compuesto por filas que se leen secuencialmente desde el principio hacia el final.
• En cada fila se recuperan los valores de las columnas mediante
métodos.
• El método a usar depende del tipo de datos, y recibe el nombre o número (empezando en
1) de columna como parámetro: getString(), getInt(), getDate(), etc
try{
Statement consulta = conex.createStatement();
ResultSet res = consulta.executeQuery("SELECT * FROM empleado");
while(res.next()){
String nombre=res.getString("nombre");
int edad=res.getInt(“edad”);
double salario=res.getDouble(“salario”);
}
consulta.close();
res.close();
conex=null;
}catch(SQLException e){}
116
El metodo executeUpdate de Connection se utiliza para insertar, eliminar o
modificar datos. Devuelve el número de las filas afectadas (insertadas, eliminadas o
modificadas) por la sentencia ejecutada. Para sentencias tales como CREATE
TABLE o DROP TABLE, que no operan con filas, el valor que devuelve
executeUpdate() es siempre cero.

String nombre=“Juan”;
String puesto=“Subdirector”;
double salario=1345.20;
try{
Statement Insercion = conex.createStatement();
int filas= Insercion.executeUpdate("INSERT INTO empleado VALUES
('"+nombre+"', '"+puesto+"', '"+salario+"')");
Insercion.close();
conex=null;
} catch (SQLException e) {}

117
Utilizando PreparedStatement: Este interfaz, al igual que el interfaz Statement, nos
permite ejecutar sentencias SQL sobre una conexión establecida con una base de
datos.

✓ Las sentencias de los objetos PreparedStatement están precompiladas por lo


tanto su ejecución será más rápida que la de los objetos Statement.

✓ PreparedStatement es muy útil cuando se repite muchas veces una consulta


similar, cambiando solo algún parámetro.

✓ La sentencia SQL que contiene un objeto PreparedStatement puede contener


uno o más parámetros de entrada. Un parámetro de entrada es aquél cuyo valor
no se especifica cuando la sentencia es creada, en su lugar la sentencia va a
tener un signo de interrogación (?) por cada parámetro de entrada. Antes de
ejecutarse la sentencia se debe especificar un valor para cada uno de los
parámetros a través de los métodos setXXX apropiados

✓ Cuando la consulta se construye con información que proviene del usuario,


protege contra ataques de inyección de SQL.

118
Para los objetos PreparedStatement, los métodos executeQuery() y executeUpdate() no
toman ningún tipo de argumentos

Scanner in=new Scanner(System.in);


String nombre=in.nextLine();
int edad=int.nextInt();
try{
PreparedStatement consulta = conex.prepareStatement("SELECT * FROM
empleado where nombre=? And Edad=?");
consulta.setInt(2,edad);
consulta.setString(1, nombre);
ResultSet res = consulta.executeQuery();
while(res.next()){
double salario=res.getDouble(“salario”);
int edad=res.getInt(“edad”);
}
consulta.close();
res.close();
conex=null;
}catch(SQLException e){}
119
Gracias

También podría gustarte