Mostrando entradas con la etiqueta JComboBox. Mostrar todas las entradas
Mostrando entradas con la etiqueta JComboBox. Mostrar todas las entradas

domingo, 5 de agosto de 2012

Operaciones CRUD en el Sistema con BD

Estructura de Paquetes del Proyecto

Para el desarrollo del sistema he adoptado usar la estructura de paquetes sugerida.
Esta estructura está organizando mediante paquetes con el nombre principal de ags, Algoritmo Genético Simple. A continuación enlisto los paquetes que tengo hasta el momento:
  1. ags.core: Contiene las clases pertenecientes al propio algoritmo genético.
  2. ags.dao: Incluye las clases que proporcionan la interface con la base de datos, como su nombre lo indica, Objetos de Acceso a Datos.
  3. ags.gui: En este paquete se tienen todas las clases que proporcionan la interface gráfica de usuario usando Swing.
  4. ags.service: Aquí se especifican las clases que son las encargadas de brindar servicios a otras capas del sistema, por ejemplo a la gui.
  5. ags.util: Las clases que sirven como utilerías son almacenadas en este paquete.


Implementación de las operaciones CRUD (Create Read Update Delete) en el Sistema

La operación Create está implementada en la creación nuevas Funciones Objetivo, los datos de una función se deben guardar en 2 tablas distintas, FuncionObjetivo y Elemento. Para acceder a este servicio tengo la interface FuncionObjetivoService que en su implementación utiliza a la implementación de la interface FuncionObjetivoDao para acceder a los datos de la Base de Datos de MySQL mediante el JDBC.

Las 4 operaciones mencionadas, están incluidas en la clase FuncionObjetivoService; el método recordFuncionObjetivo() se encarga de insertar una nueva función objetivo al la BD, para ello se realiza con una Transacción que incluye la inserción de los diferentes términos de la función objetivo en la tabla Elemento, para después, con los id’s generados de estas inserciones y los otros datos de la función objetivo guardar en la tabla FuncionObjetivo un nuevo registro.

Para que el usuario aceda a esta operación se tiene la opción de Nueva Función Objetivo dentro de Menú -> Función Objetivo. En la ventana correspondiente se pueden ingresar los datos de los coeficientes de A y B de cada uno de los 4 elementos o términos de la función objetivo, así como la variable de la cual dependen y la función base  asociada.
Del mismo modo se puede generar la vista preliminar de la función que se está configurando, oprimiendo el botón “Vista Preliminar”.


La operación Delete esta implementada en el método deleteFuncionObjetivo() de la clase FuncionObjetivoServiceImpl, y el usuario puede acceder a ella mediante: Menú -> Función Objetivo -> Eliminar Función Objetivo, en esta ventana se en listan las funciones que se encuentran en ese momento en la BD del sistema (aquí se implementa la operación Read), al oprimir el botón “Eliminar”, se eliminará la función objetivo que se encuentre seleccionada en el JComboBox. La ventana se presenta abajo:




La operación  Update también esta implementada como las anteriores, en la interface de FuncionObjetivoService,  y es accesible al usuario mediante el menú:
Menú -> Función Objetivo -> Editar Función Objetivo. Es esa pantalla aparece la lista de funciones que se encuentran en la BD, al seleccionar una y oprimir el botón Actualizar abre otra ventana donde aparecen todos los valores de la función seleccionada para poder modificarlos.
Para aplicar los cambios se debe oprimir el botón Actualizar sí todo va bien, se mostrara el aviso correspondiente. Dicho proceso se muestra en imágenes como sigue:





sábado, 4 de agosto de 2012

Usar un JComboBox() con Clases propias en Java


JComboBox del paquete Swing nos genera una Lista Desplegable, ComboBox o tambien llamado Dropdownlist. La funcionalidad default de esta clase es un poco limitada si es que queremos desplegar objetos de nuestras Clases. Para poder usar nuestras propias clases en él debemos implementar la interface ComboBoxModel.
La clase que quieramos mostrar tenemos que sobreescribir el metodo toString(), que es lo que aparecerá como elemento en la lista desplegable. 
En mi caso necesitaba mostrar en una lista las Funciones Objetivos que se encuentar almacenadas en la Base de Datos del Sistema.
Aqui el código de la Clase FOComboModel que implementa ComboBoxModel:

    import java.util.ArrayList;
    import javax.swing.ComboBoxModel;
    import javax.swing.event.ListDataEvent;
    import javax.swing.event.ListDataListener;
    import ags.core.FuncionObjetivo;
    
    public class FOComboModel implements ComboBoxModel  {
    
        private ArrayList<FuncionObjetivo> data = new ArrayList<FuncionObjetivo>();
        private ArrayList<ListDataListener> list = new ArrayList<ListDataListener>();
        private FuncionObjetivo selectedItem;
        
        public FOComboModel(ArrayList<FuncionObjetivo> data) {
            this.data = data;
        }
    
        public int getSize() {
            return data.size();
        }
    
        public Object getElementAt(int index) {
            return data.get(index);
        }
    
        public Object getSelectedItem() {
            return selectedItem;
        }
    
        public void setSelectedItem(Object elItem) {
            selectedItem = elItem instanceof FuncionObjetivo ? (FuncionObjetivo) elItem : null;
            for (ListDataListener l : list) {
                l.contentsChanged(new ListDataEvent(this, javax.swing.event.ListDataEvent.CONTENTS_CHANGED, 0, 0));
            }  
        }
        
        public void addListDataListener(ListDataListener l) {
            list.add(l);
        }
        
        public void removeListDataListener(ListDataListener l) {
            list.remove(l);
        }
    
    
    } // Fin Class FOComboModel
    

Con esto al momento de crear un JComboBox usamos nuestro propio ComboBoxModel, y podemos usar los mismos metodos que con el default, getSelectedItem() como se ha implementado, regresa el objeto que se ha seleccionado en la Lista Desplegable y podemos obener su Id con su geter definido. Aquí muestro mi codigo para mostrar una lista de Funciones Objetivo de mi Sistema:

// Definimos el ComboBox y el ComboModel
 private JComboBox jComboBox1;
 private FOComboModel foComboModel;

// Instanciamos el ComboModel
 foComboModel = new FOComboModel(foService.getFuncionesObjetivo());

// Instaciamos el ComboBox
    jComboBox1 = new JComboBox();
    getContentPane().add(jComboBox1);
    jComboBox1.setModel(foComboModel);

// En la funcion ActionListener revisar el elemento seleccionado
  FuncionObjetivo foSel;
  foSel = (FuncionObjetivo)jComboBox1.getSelectedItem()

Por ultimo la pantalla en Swing con el ComboBox usando la Clase FuncionObjetivo se ve así:



Para más informacion consultar The Java™ Tutorials.