Curso de Java PILDORAS INFORMATICAS
Curso de Java PILDORAS INFORMATICAS
VIDEO 64:
Para dibujar una imagen en un panel:
INTERFAZ Image
Image = ImagenIO.read() -> Interfaz recibe imagen de una clase estatica que implemeta ésta inferza con método READ.
Image = ImagenIO.read(new File(“ruta”)); -> La instancia recibe una ruta de la clase FILE.
Lanza IOExeception
Se dibuja en pantalla con método g.drawImage(imagen,posición x, posición y, imagen observada) -> Dibuja con método
DRAW de la clase Graphics
g.copyarea(punto x, punto y, largo, ancho, posición final x, posición final y) -> para copiar una imagen o una área ya
existente en la pantalla.
getWidth(lamina u objeto que espera ser cargado) = capturar el ancho de una imagen. getHeight(lamina u objeto que
espera ser cargado) = capturar el alto de una imagen.
EVENTOS DE RATON
Desencadenante de una acción.
3 FACTORES
o Que desencadena la acción
Objeto Evento
o Quién desencadena la acción
Objeto Fuente
o Quién recibe la acción
Objeto Listener
OBJETO EVENTO (java.util)
o EVENTBJETC
ActionEvent (java.awt.event)
WindowEvent (java.awt.event)
OBJETO FUENTE
o JBUTTON
AddActionListener(Objeto listener)
OBJETO LISTENER
o JPANEL
ActionListener(Interfaz)
ActionPerfomed(Objeto Evento)
public Lamina() {
add(botonAzul); add(botonAmarillo); add(botonNegro); botonAzul.addActionListener(this);
botonAmarillo.addActionListener(this); botonNegro.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
EVENTOS DE VENTANA
El funcionamiento es básicamente lo mismo que los eventos de ratón.
Para la interfaz Windows Listener obliga a implementar los siete métodos obligatoriamente.
WindowListener(I)
o WindowActivated(WindowEvent e) (m)
o windowClosed(WindowEvent e) (m) (cerrada aplica para multiventana y programa en ejecución)
o windowClosing(WindowEvent e) (m) (cerrando)
o windowDeactivated(WindowEvent e) (m) (desactivar ventana)
o windowDeiconified(WindowEvent e) (m) (maximizar ventana)
o windowIconified(WindowEvent e) (m) (minimizar ventana)
o windowOpened(WindowEvent e) (m)
WindowEvent©
o GetNewState()(m) -> estado nuevo de la ventana
o getOldState()(m) -> estado viejo de la ventana
WindowStateListener(i)
o windowStateChaged(WindowEvent e) (m)
EVENTOS DE TECLADO
Eventos provocados por las teclas.
KEYLISTENER(i) -> KEYADAPTER©
o KeyPressed(KeyEvent e) (m) tecla es presionada
o keyReleased(KeyEvent e) (m) tecla es levantada
o keyTyped(KeyEvent e) (m) tecla presionada y levantada
EVENTOS DE RATON
MOUSELISTENER(I) -> MOUSEADAPTER ©
o mouseClicked(MouseEvent e) <- MOUSEPRESSED + MOUSERELEASED
o mouseEntered(MouseEvent e) <-CUANDO EL RATON PARA SOBRE CIERTO COMPONENTE
o mouseExited(MouseEvent e) <-CUANDO EL RATON DEJA CIERTO COMPONENTE
o mousePressed(MouseEvent e) <- CUANDO SE DEJA EL DEDO EN LA TECLA
o mouseReleased(MouseEvent e) <- CUANDO SE QUITA EL DEDO DE LA TECLA
MOUSEEVENT©
o getX()(m)
o getY()(m)
o getModifiersEX()(m)
o getClickCount()(m)
MouseEvent.getModifierEX();
CONSTANTES: BUTTON1_DOWN_MASK -> BUTTON2_DOWN_MASK -> BUTTON3_DOWN_MASK
MOUSEMOTIONLISTENER -> controla movimiento del ratón.
o MouseDraggerd -> cuando se arrastra el ratón
o MouseMoved -> cuando se mueve el ratón
MULTIPLES FUENTES
Action(i) -> AbstractAction
o actionPerformed(ActionEvent evento) (m)
o setEnable(boolean b) (m)
o putValues(String clave, Object valor) (m) ->permite almacenar parejas de clave y valor
o addPropertyChagedListener(PropertyChangedListener oyente) (m) ->agregar propiedad al objeto oyente
o isEnable(boolean b) (m)
o getValues(String clave) (m)
o removePropertyChagedListener(PropertyChangedListener oyente) (m) ->quitar propiedad al objeto
oyente
ACTION (EVENTO)-> OBJETO ACCION(ACTION) CLAVE:VALOR -> ACTIONPERMORMED(ACTIONEVENT E) (M)
KeyStroke ©
o Static getKeyStroke(String s)(m)
InputMap©
o Put(Stroke, Object) (m)
Jpanel©
o GetInputMap(int condición) (m)
ActionMap©
o Put(Object, acción) (m)
INTRODUCCION DE TEXTO
JTextComponent -> void setText(String s) -> void getText() ->getDocument()(i)(obtencion de modelo)
o JTextField -> texto de una sola línea
o JTextArea -> texto de varias líneas
JTextComponent
o getDocument()(m)
DocumentListener(i)
removeUpdate()(m) -> ve si elimina algo del documento
insertUpdate()(m) -> ve si se inserta algo en el documento
changedUpdate()(m) -> ve si de modifica algo del documento
addDocumentListener()(m)
Todo jtextfield guarda una interfaz tipo Document por cada instancia. Mediante esta interfaz podemos modificar lo que
contiene el jtextfield.
AREAS DE TEXTO
No se le puede agregar una barra de Scroll horizontal ni vertical. Para estos casos se debe agregar el jtextarea en un
JScrollPane.
JTextArea© -> appen(m)
o GetText()(m) -> devuelve texto
o setLineWrap(boolean)(m) -> establecer si tiene saltos de línea o no
o getLineWrap()(m) -> obtiene estado de saltos de línea
JSPINNER
JSpinner
JSpinner()
JSpinner(SpinnerModel model)
CONSTRUCCION DE MENUS
JMenuBar©
o JMenu©
JMenuItem©
setAccelerator(KeyStroke obj)
JCheckBoxMenuItem
JRadioButtonMenuItem
Para el ejercicio la clase StyledEditorKit permite maneja el texto que se encuentra en un textpane con comodidad y por
selección.
MENUS EMERGENTES
Cuando se utiliza el botón secundario del ratón.
JPopupMenu
o setComponentPopUpMenu(Component c)(m) –> para indicar sobre que componente será visible
BARRAS DE HERRAMIENTAS
JToolbar
DISPOSICIONES AVANZADAS
DISPOSICION EN FLOW (FLOWLAYOUT)
DISPOSICION EN BORDE(BORDERLAYOUT)
DISPOSICION EN REJILLA(GRIDLAYOUT)
DISPOSICION EN CAJA (BOXLAYOUT)
BOX
o CreateHorizontalBox()
o createVerticalBox()
o createVerticalStrut(int height) distancia en px entre los elementos en vertical
o createHorizontalStrut(int width) distancia en px entre los elementos en horizontal
o createGlue() adaptar la distancia entre elementos para los casos donde se redimencionen los elementos
SPRINGLAYOUT
o PutConstraint(String, Component, int, String, Component)
SPRING
o Static constant(int a, int b, int c)
DISPOSICION LIBRE
Permite colocar los componentes sin un orden terminado ni posición concreta.
A nivel de programación de debe indicar la posición donde se quieren los componentes.
Para hacer un layout personalizado crear una clase que implemente:
LayoutManager(i)
o addLayoutComponent(String nombre, Component componente)(m)
o layoutContainer(Container padre)(m)
o minimumLayoutSize(Container padre)(m)
o preferredLayoutSize(Container padre)(m)
o removeLayoutComponent(Component componente)(m)
Container©
o GetComponentCount()
o getComponent(int i)
o getWidth()(m)
VENTANAS EMERGENTES
Se pueden definir en tres grupos:
1. Cuadros de dialogo -> JOptionPane
2. Selección de ficheros ->JFileChooser
3. Selección de color-> JColorChooser
JOptionPane
o ShowInputDialog
o ShowMessageDialog
o showConfirmDialog
o showOptionDialog
APPLETS Y APLICACIONES
Aplicación java que se ejecuta en un navegador de internet.
Object
o Component
o Container
Window
Frame
JFrame
Panel
Applet
JApplet
Un applet no contiene método Main, es su lugar hay un método de inicio llamado Init.
Para el paso de parámetros es necesario tener un:
<param name= “nombre” value = “valor”> ->lado del html
getParameter(“nombre”) -> lado de java
EMPAQUETADO:
Ficheros comprimidos .JAR
PASOS:
1. CMD
2. Keytool –genkey –alias BryanS –validity 160 –v
3. Contraseña
4. Datos del certificado
5. Si
6. Confirmación de contraseña anterior
7. Jarsigner.exe nombredejar.jar BryanS –verbose
8. Contraseña anterior
MANEJO DE EXECEPCIONES
ERROR
TIEMPO DE COMPILACION (SINTAXIS)
TIEMPO DE EJECUCION
o THROWABLE
ERROR -> ERROR DE HARDWARE
EXCEPTION ->
IOEXCEPTION -> EXCEPCIONES COMPROBADAS
RUNTATIMEEXCEPTION -> EXCEPCIONES NO COMPROBADAS
Estructura try-catch
Try{…..
………
…}catch(IOException e){
……..
……}
THROWS
No es recomendable la utilización de éste método ya que se puede mejorar el código.
El funcionamiento del Throws es para crear un objeto del tipo error que se puede dar, pero es necesario que después de
crearlo, capturarlo.
Si al método se le indica que puede lanzar una excepción de cualquier tipo, lo correcto es implementar el try catch en el
lugar donde se utilizará el método, no en donde se está implementando.
Cuando la excepción es una comprobada Java obliga a implementar el try-catch de lo contrario no.
EXCEPTION
o GetMessage()
o getClass()
o getName()
EXCEPCIONES PERSONALIZADAS
EXCEPCIONES MULTIPLES
FINALLY
Bloque de la excepción que sí o sí se ejecuta.
1. FileInputStream
2. FileOutputStream
SERIALIZACION
Convertir un objeto en una suceción de Bytes.
Interfaz Serializable -> implica que se le indica a la clase que algunos de sus integrantes están suceptibles a ser
grabados externamente.
ObjectOutputStream©
o WriteObject()(m)
ObjectInputStream©
o readObject(m)
CAMBIOS DE VERSIONES
SERIAL VERSION UID:
Los programas Java tienen como hulla un demoninado SHA. Es una sucesión de 20 Bytes que se denomina SERIAL
VERSION UID. Java tiene que hacer una comparación de Serial Version UID para poder deserealizar un programa de lo
contrario no lo podrá hacer.
Para poder evitar el caso que Java genera el propio SHA, es conveniente crear una constantes private static final long
serialVerionUID = 1L;
Siempre que se implemente Serializable, o se herede de una clase que lo implementa es conveniente colocar el Serial
Version.
FICHEROS Y DIRECTORIOS
File©
o String getAbsolutePath() -> ruta absoluta de un archivo o directorio
o Boolean exists() -> archivo o directorio existe en ruta especificada.
o String getPath()
o String[] list()
o String getCanonicalPath()
o Boolean idDirectory()
ArrayList
o Iterator()m
Iterator(i)
o hasNext()
o next()
o remove()
PROGRAMACION GENERICA
Consiste escribir código que se pueda reutilizar entre diferentes tipos de objetos. Usando genéricos se pueden evitar:
1. Uso continuo del casting
2. Complicación del código
3. No posibilidad de comprobación de errores
Ventajas:
1. Sencillez en código
2. Reutilización del código con diferentes tipos de objetos
3. Comprobación de errores en tiempo de compilación
Thread
o Void Interrupt() -> no se puede utilizar si se está utilizando slepp().
o Boolean isInterrumped()
o Static boolean interrupted()
o Stop() método obsoleto.
Para establecer bloqueos sin perder el hilo y que posteriormente haga su trabajo se usa la Interfaz Condition con sus
métodos a disposición, se pueden crear cuantas condiciones se quiera, se implementa un cierre explicito con cuantas
condiciones se quieran.
Una alternativa puede ser la clase Object con sus métodos, pero únicamente se puede manejar una condición:
1. Void wait() == Condition -> void await()
2. Void notifyAll() == Condition -> void signalAll()
Para el Object hay un cierre implicito, para los casos donde se trabajan con hilos se puede crear una condición para el
cierre no más de uno.
COLECCIONES
Almacén de objetos dinámicos.
Ventajas:
Puede cambiar el tamaño dinámicamente
Pueden guardar objetos tanto como primitivos.
Puede ir provistas de ordenamiento.
Se puede insertar y eliminar elementos.
COLLECTION (I)
o SET (I) -> almacena no repetidos (si se implementa equal y hashcode) y no ordenados, más eficiencia
HashSet© -> Rápida, No duplicados, No ordenación, No acceso aleatorio
LinkedHashSet© ->Ordenación por entrada, Eficiente al acceder, No eficiente al agregar
TreeSet© ->Ordenado, por eficiente
EnumSet© ->La mejor para los tipos enumerados.
CopyOnWriteArraySet© ->Específico concurrencia, Eficiencia Lectura, Poca eficiencia escritura,
poco eficiente al eliminar.
ConcurrentSkipListSet© ->Específico concurrencia, Admite Ordenación, Con muchos elementos
no es eficiente.
SORTEDSET(I)
o LIST(I) -> almacena repetidos e indexados con valores numéricos, ofrece acceso aleatorio, eficiencia
lenta
ArrayList© -> Sea rápido el acceso a los elementos. Se adapta a un gran número de escenarios.
LinkedList© ->Listas enlazadas. Gran eficiencia agregando y eliminando. No tanta eficiencia
leyendo elemento.
Vector© -> OBSOLETO -> operaciones de concurrencia
CopyOnWriteArrayList© -> Utilizada en programas concurrentes, eficiente en operaciones de
lectura, pero muy poco eficiente en operaciones de escritura.
o QUEUE -> no permite aleatorio, se permite acceder al final o inicio <-(cola)
ArrayDeque©
LinkedBlockingDeque©
LinkedList©
ProrityQueue©
PriorityBlockingQueue©
o MAP(I) -> colección de elementos repetibles, indexados con clave única arbitraria
HashMap© -> No ordenación, Eficiente
LinkedHashMap© -> Ordenado por inserción, Permite ordenación por uso, Eficiencia Lectura,
Poca eficiencia escritura
TreeMap© -> Ordenado por clave, Poco eficiente en todas sus operaciones
EnumMap© ->Pemite Enum como claves, Muy eficiente.
WeakHashMap© ->Utilizado para crear elementos que vaya borrando el sistema si no se
utilizan, Muy copo eficiente
HashTable© -> Considerado Obsoleto, Utilizado en operaciones de concurrencia
ConcurrentHashMap© ->Utilizado en concurrencia, No permite nulos.
SORTEDMAP(I)
LIST©
Ventajas:
1. Acceso aleatorio
2. Están ordenadas(Collection.sort)
3. Añadir/eliminar sin restricción
4. ListIterator modifica en cualquier dirección
5. Sintaxis similar a Array
Desventajas:
1. Bajo rendimiento en operaciones concretas que se resolverían mejor con otras interfaces.
SET©
Ventajas:
1. No permite elementos duplicados
2. Uso sencillo del método add que además asegura no elementos duplicados.
Desventajas:
1. No tiene acceso aleatorio.
2. Poca eficiencia a la hora de ordenar elementos (y no siempre se puede).
MAP©
Ventajas:
1. Asociación Clave -> Valor
2. No claves iguales
Desventajas
1. Poca eficiencia a comparación de las otras colecciones.
QUEUE©
Ventajas:
1. Muy rápido acceder al primer elemento y al último
2. Permite crear colas de elementos muy eficientes (LIFO/FIFO)
Desventajas:
1. Acceso lento a los elementos intermedios.
OBJETOS ITERADORES
Recorrer una colección de elemento a elemento. Nos tenemos que apoyar en Iterator<E>
1. ITERATOR<E>
o Next()
o Hasnext()
o Remove()
SOCKETS
Permite crear aplicaciones Java tipo cliente-servidor. Puente virtual que comunica al cliente con el servidor con el fin de
trasladar información.
Leer ResultSet.
getString(),
next()
Utilizando While o Until
METADATOS
Datos que describen la base de datos o alguna de sus partes.
TIPOS:
Relativos a la base de datos
a. Información del gestor BBDD
b. Versión del gestor
c. Driver de la conexión
d. Versión del Driver
Relativos a un conjunto de resultados
a. Nombres de las tablas
b. Nombres de los campos de las tablas
c. Tipos de datos de los campos
d. Propiedades de los campos
Relativos a los parámetros de las sentencias preparadas
CONSTRUCCION DE JSP
Código java dentro de HTML
Archivo con extención JSP
Ejemplo
<html>
<body>
La hora del servidor es <%=new java.util.Date() %>
</body>
</html>
Buenas prácticas:
No abusar de scriptles y declaraciones en archivos JSP
Evitar la programación de cientos de líneas en archivos JSP
Modular el programa separando el código Java en clases independientes
Utilizar MVC u otro patrón de diseño que se adecue al diseño.
Para incluir en jsp otros archivos que pueden ser o no jsp se utiliza la palabra reservada INCLUDE.
USUARIOS
Cuando un usuario ingresa al sistema el servidor guarda en memoria la sesión única del usuario, esto da lugar a poder
acceder a distintos métodos utilizables de la sesión.
La información en guardada en un par de nombre y valor. Nombre identificativo de la acción y el valor de esa acción.
Un sitio no almacena una única Cookie.
Las cookies de terceros pueden ser los anuncios mostrados en las páginas web relacionados con publicidad u otras
cosas.
CREACIÓN DE COOKIE(WRITE)
Cookie©
o SetMaxAge(int segundos) (m)
HttpServletResponse (i)
o addCookie(Cookie la_cookie) (m)
TIPOS
JSP TAGS
o JSP CUSTOM TAGS (PROPIAS) fabricadas propiamente
o JSTL ESTÁNDAR (TAG LIBRARY) librearías que nos proporcionan que se pueden descargar
Core
Funcionalidades básicas de JSP, Bucles, condicionales, variables, etc.
Formato
Aplican formato a elementos dentro de JSP, Formato fecha, número moneda.
Internacionalización
XML
Manipulación de código XML dentro de páginas web JSP
SQL
Manipulación de BBDD desde páginas JSP. Práctica no recomendada. Se recomienda en
su lugar el uso de Beans.
SERVLETS
Programa java que se ejecuta en un servidor WEB.
El servlet recibe petición del cliente (navegador) y realiza su tarea.
Que tarea hace el servlet:
1. Genera una respuesta HTMl
2. Llamar a otro servlet
3. Utiliza cookies y sesiones
4. Enlace (controlador) entre el cliente y BBDD.
JSP
1. Cuando lo lógica a programar sea poca.
SERVLET
2. Cuando el código en muy complejo
Servlet(i)
o HttpServlet©
doGet(HttpServletRequest, HttpServletResponse)(m)
ServletResponse(i)
o getWrite()(m)
HttpServletResponse(i)
o printWrite()©
Se pueden utilizar dos métodos para enviar datos desde un formulario al servidor (Request):
get
o Utilizar barra de navegación del navegados como vehículo de transporte del navegador.
o www.ejemplo.com?campo1=valor1&campo2=valor2....
o Recomendable para depuraciones
o Limitaciones en cuanto a la cantidad de datos a enviar
o Se puede guardar en favorito o enviar la dirección a alguien
Post
o Se envía la información del formulario mediante el objeto Request como vehículo de transaporte
(invisible).
o Util para enviar gran cantidad de información.
o Capacidad para enviar datos adjuntos, datos binarios.