martes, 28 de julio de 2020

Reseña: Archivos y Componentes Swing


ARCHIVOS

Los programas usan variables para almacenar información: los datos de entrada, los resultados calculados y valores intermedios generados a lo largo del cálculo. Toda esta información es efímera: cuando acaba el programa, todo desaparece. Pero, para muchas aplicaciones, es importante poder almacenar datos de manera permanente. Cuando se desea guardar información más allá del tiempo de ejecución de un programa lo habitual es organizar esa información en uno o varios ficheros almacenados en algún soporte de almacenamiento persistente. Otras posibilidades como el uso de bases de datos utilizan archivos como soporte para el almacenamiento de la información.
En Java, los distintos tipos de ficheros se diferencian por las clases que usaremos para representarlos y manipularlos. Como las clases que usaremos pertenecen a la biblioteca estándar del lenguaje, su uso es algo más complejo que las de las clases de la ACM, ya que su diseño se ha realizado pensando en su uso industrial. Las clases que usaremos para el tratamiento de ficheros están ubicadas en el paquete java.io por lo que deben ser importadas. Además, el código que trabaja con archivos ha de considerar que muchas cosas pueden  ir mal cuando se trabaja con ellos: el archivo puede estar corrupto,  alguien ha desconectado el pendrive a medio  ejecutar del programa, es un disco en red y ésta ha caído, o no tiene más espacio para almacenar información, etc.  Es por ello que, aunque de forma breve, deberemos introducir el mecanismo estándar en Java para tratar con los errores que pueden  darse en nuestros programas: las excepciones.




COMPONENTES SWING


Es un API formado por un conjunto de componentes mejorados que sustituyen a los de las herramientas AWT originales más una serie de componentes avanzados que permiten crear interfaces gráficas de usuario en Java. Es por esto, que la mayoría de los programas Swing necesitan importar dos paquetes AWT: java.awt.* y java.awt.event.*. Como regla, los programas no deben usar componenetes pesados de AWT junto a componentes Swing, ya que los componentes de AWT son siempre pintados sobre los de Swing. (Por componentes pesadas de AWT se entiende Menu, ScrollPane y todas las componentes que heredan de las clases Canvas y Panel de AWT).


CARACTERÍSTICAS

  • Escrito totalmente en java.
  • No reemplaza a AWT.
  • Se apoya sobre AWT y añade JComponents.
  • Selección de diferentes apariencias.
  • Utilización de componentes ligeros.
  • Arquitectura Model-View-Controller (MVC).
  • Nuevos componentes.
  • Otros: iconos, bordes, tooltips, beans, etc.
  • Proporciona utilidades para facilitar creación de aplicaciones gráficas.

Como vimos en entradas anteriores, un contenedor es el tapiz donde pintaremos nuestros componentes graficos, existen contenedores principales, entre estos se encuentran JFrame y JDialog pero también existen otros contendedores incluidos dentro de los mencionados...

  • JFrame – Es la Ventana de aplicación, el contenedor principal
  •  JDialog – Una ventana de tipo Ventana de diálogo, tambien puede ser un contenedor principal.
  • JPanel – Permite la creación de paneles independientes donde se almacenan otros componentes.
  •  JScrollPane – permite la vinculación de barras de desplazamiento en un contenedor.
  • JSplitPane – permite la creación de un contenedor dividido en 2 secciones.
  • JTabbedPane – Permite la creación de pestañas, cada pestaña representa un contenedor independiente.
  • JDesktopPane – Permite crear ventanas dentro de una ventana principal 
  • JToolBar – Permite introducir una Barra de herramientas 

Componentes Atómicos

Los componentes atómicos son los elementos que no pueden almacenar otros objetos o componentes graficos, por ejemplo, un JPanel no es Atómico, ya que en el podemos almacenar JButtons, JTextField entre otros...

  • JLabel – Permite Vincular Etiquetas, tanto de texto como de imagenes
  • JButton – Permite vincular Botones simples. 
  • JCheckBox – Son Casilla de verificación, ideal para selección múltiples.
  • JRadioButton – Permite presentar opciones de selección similares a las checkbox, solo que el enfoque de estas es de única selección.
  • JToggleButton – Botón que al oprimirlo se quedará presionado hasta que se ejecute otro evento.
  • JComboBox – Permite mostrar una lista de elementos como un combo de selección.
  • JScrollBar – Permite mostrar una barra de desplazamiento, regularmente usada en Areas de texto o paneles donde el contenido es mayor que el tamaño del componente. 
  • JSeparator – Permite separar opciones, es una barra simple. 
  • JSlider - Permite vincular un Deslizador en nuestra ventana. 
  • JSpinner – permite vincular una caja de texto con botones integrados para seleccionar algún valor. 
  • JProgressBar – Establece una barra de progreso.

Son todos aquellos que nos permiten procesar cadenas de texto, sea como entrada o salida de información.

  • JTextField – Permite introducir un campo de texto simple.
  • JFormattedTextField – Permite introducir un campo de texto con formato, (si definimos que solo recibe números no permitirá letras...)
  • JPasswordField – Campo de texto que oculta los caracteres ingresados.
  • JTextArea – Permite vincular un área de texto donde el usuario ingresara información o simplemente para presentar cadenas de texto.
  • JEditorPane –Permite vincular un área de texto con propiedades de formato.
  • JTextPane – Similar al anterior, permitiendo otras opciones de formato, colores, iconos entre otros.

Estos componentes permiten vincular opciones de menú en nuestras ventanas, tipo menú principal, como por ejemplo el conocido Inicio, Archivo, Edición etc..

  • JMenuBar – Permite vincular una barra de menús.
  • JMenu– Permite vincular botones o enlaces que al ser pulsados despliegan un menú principal.
  • JMenuItem – Botón u opción que se encuentra en un menú.
  • JCheckBoxMenuItem– Elemento del menú como opciones de checkbox.
  • JRadioButtonMenuItem– Elemento del menú como botón de selección.
  • JPopupMenu– Opciones de menú emergentes.

Componentes Complejos

Estos son componentes un poco mas avanzados, cumplen con funciones mas enfocadas a procesos especificos y complejos, como por ejemplo obtener gran cantidad de información de una base de datos, trabajo con nodos, colores entre otros.

  • JTable – Permite vincular una tabla de datos con sus respectivas filas y columnas.
  • JTree - Carga un árbol donde se establece cierta jerarquía visual, tipo directorio.
  • JList – Permite cargar una lista de elementos, dependiendo de las propiedades puede tenerse una lista de selección múltiple.
  • JFileChooser – Es un componente que permite la búsqueda y selección de ficheros entre otras.
  • JColorChooser – Componente que permite cargar un panel selector de color
  • JOptionPane – No es algo complejo sino mas un componente independiente que permite mostrar un cuadro de diálogo personalizable.

sábado, 25 de julio de 2020

Microclase: Archivos y Compenentes Swing en Java


Sean bienvenidos una vez más a nuestro blog. El día de hoy les traemos un vídeo sobre archivos y compomentes swing. Estos elementos son excelentes para hacer nuestros programas más dinámicos.


sábado, 4 de julio de 2020

Microclase: Clases Abstractas, Interfaces, Excepciones y Colecciones en Java

Bienvenidos otra vez, les dejamos una microclase con estos conceptos y ejemplos para su comprensión. Esperamos que sean de ayuda.

Reseña: Clases Abstractas, Interfaces, Excepciones y Colecciones


CLASES ABSTRACTAS: 

 En Java se dice que son clases abstractas aquellas clases base (superclases) de las que no se permite la creación de objetos. Para ello, se utiliza la palabra clave abstract.

METODOS ABSTRACTOS:

En una clase abstracta es posible definir métodos abstractos, los cuales se caracterizan por el hecho de que no pueden ser implementados en la clase base. De ellos, solo se escribe su signatura en la superclase, y su funcionalidad –polimórfica– tiene que indicarse en las clases derivadas (subclases).
A su vez, las clases abstractas suelen contener métodos abstractos: la situación es la misma. Para que un método se considere abstracto ha de incluir en su signatura la palabra clave abstract. Además un método abstracto tiene estas peculiaridades:
a) No tiene cuerpo (llaves): sólo consta de signatura con paréntesis.
b) Su signatura termina con un punto y coma.
c) Sólo puede existir dentro de una clase abstracta. De esta forma se evita que haya métodos que no se puedan ejecutar dentro de clases concretas. Visto de otra manera, si una clase incluye un método abstracto, forzosamente la clase será una clase abstracta.
d) Los métodos abstractos forzosamente habrán de estar sobreescritos en las subclases. Si una subclase no implementa un método abstracto de la superclase tiene un método no ejecutable, lo que la fuerza a ser una subclase abstracta. Para que la subclase sea concreta habrá de implementar métodos sobreescritos para todos los métodos abstractos de sus superclases.
Un método abstracto para Java es un método que nunca va a ser ejecutado porque no tiene cuerpo. Simplemente, un método abstracto referencia a otros métodos de las subclases. ¿Qué utilidad tiene un método abstracto? Podemos ver un método abstracto como una palanca que fuerza dos cosas: la primera, que no se puedan crear objetos de una clase. La segunda, que todas las subclases sobreescriban el método declarado como abstracto.

INTERFACES:  
Las interfaces son una forma de especificar qué debe hacer una clase sin especificar el cómo. Estas tienen una semejanza con las clases abstractas, en el sentido que no tiene sentido definir objetos instancia de una interfaz. Igual que las clases abstractas clase asociada se comprometa a implementar todos los métodos en ellas definidos, PERO en este caso la relación no es de herencia en plenitud, dado que no hay atributos en la definición de una interfaz.

Las interfaces no son clases, sólo especifican requerimientos para la clase que las implementa o, desde su uso, los servicios para la función que manipula un objeto que se dice cumplir con la interfaz.

¿Cómo se usan las interfaces?
-Debemos crear una clase que implementa la interfaz. Implementarla  implementar cada uno de los métodos de la interfaz.
-Podemos definir métodos que usen como parámetro objetos que implementen la interfaz. Basta usar el nombre de la interfaz como el tipo del parámetro.
-Luego, las instancias de una clase que implemente la Interfaz, pueden tomar el lugar del argumento donde se espere alguien que implemente la interfaz.

Ejemplo: Supongamos que interfaz que describe a un nadador de cuatro estilos (nadaLibre(), nadaDespaldas(), nadaPecho(), nadaMariposa()). En Natación hay muchas instancias de Alumnos, entre ellos hay algunos que pueden ser instancias de AlumnosNadadores, clase que implementa la interfaz  Nadador. Con ello donde se necesite un nadador, podremos enviar esos alumnos. Cuando se pida un alumno nadador en una función, se entiende que sólo se invocarán sus métodos como nadador.


EXCEPCIONES:  
En Java los errores en tiempo de ejecución (cuando se esta ejecutando el programa) se denominan excepciones, y esto ocurre cuando se produce un error en alguna de las instrucciones de nuestro programa, como por ejemplo cuando se hace una división entre cero,  cuando un objeto es 'null' y no puede serlo, cuando no se abre correctamente un fichero, etc. Cuando se produce una excepción se muestra en la pantalla un mensaje de error y finaliza la ejecucion del programa.
JERARQUIA DE EXCEPCIONES:

 

TRY/CATCH
En el centro del manejo de excepciones están try y catch. Estas palabras clave trabajan juntas; no puedes atrapar (catch) sin intentarlo (try). Aquí está la forma general de los bloques de manejo de excepciones try/catch:
try{
//bloque de código para monitorear errores
}
catch (TipoExcepcion1 exOb){
//Manejador para TipoExepción1
}
catch (TipoExcepcion2 exOb){
//Manejador para TipoExepción2
}
TipoExcepcion es el tipo de excepción que ha ocurrido. Cuando se lanza una excepción, es atrapada por su instrucción catch correspondiente, que luego procesa la excepción. Como muestra la forma general, puede haber más de una declaración catch asociada con un try. El tipo de la excepción determina qué declaración de captura se ejecuta. Es decir, si el tipo de excepción especificado por una instrucción catch coincide con el de la excepción, entonces se ejecuta esa instrucción de catch (y todos los demás se anulan). Cuando se detecta una excepción, exOb recibirá su valor.
Si no se lanza una excepción, entonces un bloque try finaliza normalmente, y todas sus declaraciones catch se pasan por alto. La ejecución se reanuda con la primera instrucción después del último catch. Por lo tanto, las declaraciones catch se ejecutan solo si se lanza una excepción.

COLECCIONES:

Una colección representa un grupo de objetos. Esto objetos son conocidos como elementos. Cuando queremos trabajar con un conjunto de elementos, necesitamos un almacén donde poder guardarlos. En Java, se emplea la interfaz genérica Collection para este propósito. Gracias a esta interfaz, podemos almacenar cualquier tipo de objeto y podemos usar una serie de métodos comunes, como pueden ser: añadir, eliminar, obtener el tamaño de la colección… Partiendo de la interfaz genérica Collection extienden otra serie de interfaces genéricas. Estas subinterfaces aportan distintas funcionalidades sobre la interfaz anterior.

Set

La interfaz Set define una colección que no puede contener elementos duplicados. Esta interfaz contiene, únicamente, los métodos heredados de Collection añadiendo la restricción de que los elementos duplicados están prohibidos. Es importante destacar que, para comprobar si los elementos son elementos duplicados o no lo son, es necesario que dichos elementos tengan implementada, de forma correcta, los métodos equals y hashCode. Para comprobar si dos Set son iguales, se comprobarán si todos los elementos que los componen son iguales sin importar en el orden que ocupen dichos elementos.
Dentro de la interfaz Set existen varios tipos de implementaciones realizadas dentro de la plataforma Java. Vamos a analizar cada una de ellas:
·         HashSet
·         TreeSet
·         LinkedHashSet: esta implementación almacena los elementos en función del orden de inserción. Es, simplemente, un poco más costosa que HashSet.
Ninguna de estas implementaciones son sincronizadas; es decir, no se garantiza el estado del Set si dos o más hilos acceden de forma concurrente al mismo.
List
La interfaz List define una sucesión de elementos. A diferencia de la interfaz Set, la interfaz List sí admite elementos duplicados. A parte de los métodos heredados de Collection, añade métodos que permiten mejorar los siguientes puntos:
·         Acceso posicional a elementos: manipula elementos en función de su posición en la lista.
·         Búsqueda de elementos: busca un elemento concreto de la lista y devuelve su posición.
·         Iteración sobre elementos: mejora el Iterator por defecto.
·         Rango de operación: permite realizar ciertas operaciones sobre ragos de elementos dentro de la propia lista.
Dentro de la interfaz List existen varios tipos de implementaciones realizadas dentro de la plataforma Java. Vamos a analizar cada una de ellas:
·         ArrayList
·         LinkedList
Ninguna de estas implementaciones son sincronizadas; es decir, no se garantiza el estado del List si dos o más hilos acceden de forma concurrente al mismo.

Map

La interfaz Map asocia claves a valores. Esta interfaz no puede contener claves duplicadas y; cada una de dichas claves, sólo puede tener asociado un valor como máximo.
Dentro de la interfaz Map existen varios tipos de implementaciones realizadas dentro de la plataforma Java. Vamos a analizar cada una de ellas:
·         HashMap
·         TreeMap
·         LinkedHashMap
Ninguna de estas implementaciones son sincronizadas; es decir, no se garantiza el estado del Map si dos o más hilos acceden de forma concurrente al mismo.