Vas a desarrollar una aplicación que simule una gestión de información relacionada con algún elemento cotidiano que tú elijas, como puedan ser los productos ofrecidos por un determinado tipo de comercio (libros, material informático, dispositivos electrónicos, vehículos, ropa, electrodomésticos, etc.), o conjuntos de elementos como equipos, competiciones o jugadores, etc.

Crea un nuevo proyecto de Aplicación Java en Netbeans, con un objeto JFrame que será la clase principal de la aplicación y realiza en el código de dicha clase las siguientes operaciones.

Recuerda utilizar Git (SmartGit o desde el propio NetBeans) para almacenar una copia de la versión diaria del proyecto y subirla a GitHub.

Día 1

Inicializa un vector (array unidimensional) que contenga una serie de cadenas de texto que hagan referencia a una serie de categorías que puedan ser utilizadas en la aplicación. Por ejemplo, las categorías de libros (novela, drama, humor, etc.). La variable que haga referencia al vector deberá estar declarada e inicializada en la misma línea de código como una propiedad privada de la clase Java que debes crear para realizar todas las operaciones sobre el vector. Añade un comentario en el código explicando qué información se guarda en esa variable, y recuerda utilizar siempre nombres de variables significativos.

El contenido del array se deberá mostrar en un área de texto (JTextArea) que coloques en una clase de tipo JDialog (en fases posteriores del proyecto se abrirá esta ventana desde una ventana JFrame). El contenido del vector debe aparecer de manera que cada uno de sus elementos se coloque en una línea. Esta operación debe realizarse desde un método que retorne una cadena de caracteres con todo el contenido que debe mostrarse. Dicho método debe desarrollarse en la clase donde esté declarado el array, y será llamado desde la clase de la ventana que muestra la información. Documenta el método con una cabecera al estilo de JavaDoc, y comenta las líneas de código principales.

Añade al inicio de cada línea el número de orden en el que se encuentra cada elemento, empezando desde el 1, y empleando algún separador entre el número y el texto (por ejemplo: 1.-Novela). No uses el punto y el guión como en el ejemplo, emplea el separador que más te guste.

Busca información en Internet sobre cómo cambiar desde el código el tipo de fuente del JTextArea y aplícalo usando el tipo, tamaño, estilo o color que prefieras.

En un campo de texto (JTextField), el usuario podrá indicar un número que hará referencia a uno de los elementos del vector. También dispondrá de un botón "Subir" y otro "Bajar" que permitirán al usuario cambiar el orden de los elementos del array, subiendo o bajando el elemento indicado en el orden del vector. El cambio de orden se debe realizar en un método al que se le indique las 2 posiciones que se deben intercambiar del vector.

Controla los límites del vector, para que no se pueda subir antes de la posición 0 ni bajar más allá del tamaño del array. Esto se debe controlar con un método que retorne si la posición indicada es correcta o no. Acuérdate añadir los comentarios necesarios en todo el código.

Además asegúrate de que el usuario introduce un valor numérico entero, mostrando un mensaje de aviso en caso contrario.

Ventanas de mensajes y confirmación

 

Cambia los textos de los botones "Subir" y "Bajar" por imágenes, realizando la asignación de la imagen desde el código fuente, no desde la vista de diseño de la ventana. Procura que las imágenes utilizadas se encuentren dentro de los paquetes de fuentes de tu proyecto en lugar de hacer referencia a ellas con la ruta completa de la carpeta en la que se encuentren dentro de tu ordenador. De esta manera asegurarás que los usuarios de tu aplicación vean las imágenes aunque se encuentren en otro ordenador. Indica en los comentarios del código de dónde has obtenido las imágenes, y en un archivo de texto colocado en la carpeta principal del proyecto indica las licencias que tienen las imágenes.

Realiza alguna operación más a tu gusto sobre el array, realizando alguna consulta o modificación de los datos contenidos, procurando que tenga sentido con el tipo de información que se está manejando.

Añade algún elemento más a la ventana que quede bien integrado en la aplicación o añade alguna nueva funcionalidad a los elementos ya existentes.

Día 2

Crea una nueva clase Java más que se utilizará para poder crear cada objeto que gestionará tu aplicación (libros, material informático, dispositivos electrónicos, vehículos, ropa, electrodomésticos, etc.). Entre las propiedades de dicha clase deberá encontrarse al menos un dato de tipo String, otro numérico, y alguno más de tipo booleano. Una de las propiedades, deberá ser obligatoriamente una cadena de texto donde se almacene una copia de una de las cadenas contenidas en el array comentado anteriormente (el de las categorías).

Para poder crear los objetos se ofrecerá la posibilidad de hacerlo sin indicar ningún dato, o bien, indicando valores para cada una de las propiedades que tenga.

Todas las propiedades deberás tener visibilidad privada, por lo que deberás crear los métodos get y set correspondientes para poder consultar y modificar los valores contenidos en cada una de las propiedades.

Documenta adecuadamente esta clase para poder ser usada con Javadoc.

En la misma clase donde habías declarado el array de categorías, declara un ArrayList para almacenar una lista de objetos de la clase que se acaba de comentar. A esa lista deberás aplicarle visibilidad pública y de carácter estático, para poder ser utilizada más cómodamente desde otras clases.

Esta última clase que has creado con la lista de elementos, debe tener implementado un método que se encargue de crear unos cuantos objetos, con los valores que desees en sus propiedades, y dichos objetos se añadirán a la lista para poder utilizarlos durante las pruebas.

Para gestionar el contenido de la lista, debes crear una nueva clase JDialog donde se mostrarán, uno a uno, cada elemento de la lista con todos los valores de sus propiedades. En el método constructor de esta ventana debes hacer una llamada al método que crea objetos de ejemplo en la lista, para que se puedan mostrar sus datos.

Establece algún mecanismo de navegación mediante botones para poder avanzar y retroceder por cada elemento de la lista, controlando mediante mensajes informativos que se ha llegado al inicio o final de la lista cuando ocurra esa situación.

Cualquier cambio que el usuario haga en los datos mostrados en pantalla, deberán ser actualizados en el objeto correspondiente que se está mostrando. Este proceso se realizará cuando estimes oportuno, usando botones de Guardar/Cancelar, al avanzar o retroceder de registro, etc.

Introduce controles en los componentes de la ventana para impedir que se introduzcan valores incorrectos según el tipo de información que deba introducirse para cada propiedad. 

Busca información sobre cómo añadir un menú contextual (usando el botón derecho del ratón) y añade las opciones de navegación de avance y retroceso.

Día 3

Ahora debes implementar el código necesario para que las modificaciones que se realicen en las propiedades de los elementos de la lista quedan almacenadas en cada objeto correspondiente. Es decir, si se está mostrando en pantalla un determinado producto, por ejemplo, la información que el usuario introduzca en los campos de texto y demás componentes de la ventana, deben quedar almacenados, de manera que si se vuelve a consultar de nuevo el mismo producto, aparezcan los cambios realizados. Debes tener en cuenta, que al no almacenarse la información en una base de datos ni archivo, los cambios en los datos se perderán una vez que se cierre la aplicación. Por tanto, crea un método en la misma clase que el JDialog que permita actualizar los datos del objeto que se está visualizando en pantalla, recogiendo la información que se encuentre en ella. Dicho método será llamado cuando el usuario pulse alguno de los botones de navegación (avance o retroceso).

La información referente a la categoría del objecto que se esté mostrando deberá poder actualizarse mediante un JComboBox, cuyo contenido se cargará desde el array del que se había hablado inicialmente. Para ello, descubre en Internet cómo se utilizan los componentes JComboBox y concretamente el método addItem que ofrece esa misma clase.

Estable también algún mecanismo (botones, menús, etc.) para que también se pueda eliminar un determinado objeto de la lista, y también que se puedan añadir nuevos objetos. Realiza estas operaciones a tu gusto, aunque se tendrá en cuenta que utilicen una buena estructura del código y amigabilidad para el usuario.

Día 4

Como ventana principal de la aplicación vas a crear un JFrame donde se mostrará sólo una parte de los elementos que tengas en la lista. Es decir, como si fuera un escaparate donde se muestren una serie de artículos u objetos seleccionados elegidos entre todos los disponibles, que serán los que haya en la lista.

Para ello, dentro del JFrame añade una serie de áreas de texto (JTextArea) en forma de matriz con tantas filas y columnas como quieras. En cada área de texto se mostrará la información de un determinado objeto de la lista. La información que se muestre será la que se obtenga como resultado de un método toString que debes crear en la clase que definen tus objetos. Para saber qué objetos debe mostrarse en cada posición del escaparate, la aplicación debe tener una matriz del mismo tamaño que el que hayas establecido para el escaparate en la ventana. Cada elemento de esa matriz será un objeto de los que tengas en la lista que estás manejando.

La colocación de un determinado objeto en la matriz lo realizará el usuario cuando está visualizando los datos de un determinado objeto, en el JDialog que se ha diseñado anteriormente (el que muestra el detalle). En esa ventana de detalle debes añadir 2 campos de texto que permitirán al usuario indicar la posición de ese objeto en el escaparate (en la matriz). Las posiciones que se indiquen deberán empezar desde 1 para el usuario, aunque internamente se almacenen en la matriz desde las posiciones 0.

Esta nueva ventana principal que estás diseñando ahora, debe tener algún tipo de acceso a los 2 JDialog que se han creado hasta ahora (el del detalle de cada objeto y el del array de categorías). Así que descubre en Internet cómo abrir una ventana JDialog desde un JFrame, impidiendo al usuario que desde un JDialog pueda volver al JFrame sin cerrar el JDialog que se haya abierto.

Añade a tu gusto alguna manera más visual para que usuario pueda mover o eliminar objetos del escaparate. 

Día 5

Habilita una opción en tu aplicación para que el usuario pueda importar datos desde un archivo XML que se elija desde una ventana de tipo JFileChooser. Decide tú mismo la estructura que quieres que tenga el archivo, pero debes tener en cuenta que en un mismo archivo se podrán tener los datos de más de un objeto del tipo que esté gestionando tu aplicación.

Establece los controles que creas necesarios para los casos en que los datos que se estén importando sean incorrectos (por ejemplo, fuera de límites, de tipo incorrecto, etc).

Día 6

Añade una función para exportar todos los datos contenidos en la lista de objetos a un fichero de texto en formato CSV.

Busca en Internet información sobre este tipo de formato de archivos de texto para contener datos y poder ser importados fácilmente por hojas de cálculo y otras herramientas similares. Como podrás averiguar, hay diferentes formatos para el contenido del archivo. tendrás que generar el contenido del archivo de manera que cada dato ocupe un ancho fijo, de manera que la información almacenada se muestre en un editor de texto como si estuviera en columnas. Descubre en Internet cómo dar formato de ancho fijo a las cadenas de texto, y cuidado con los datos que puedan ocupar más del ancho que estipules!