Consulta

Publicado en 'Programación' por Raise, 15 Nov 2014.





  1. Raise

    Raise Miembro nuevo

    Registro:
    13 May 2014
    Mensajes:
    21
    Likes:
    1




    Buenas noches, tengo un problema con un código, estoy trabajando en Java con el Modelo-Vista-Controlador incluyendo interface, se supone que registro alumnos en un ListArray (lo cual funciona) y luego debo seleccionar en un combo el método de búsqueda (por ciclo, carrera, etc.). El problema es que al presionar el botón (que ejecuta una función) me devuelve toda la lista. Ejemplo: Si selecciono búsqueda por carrera otro combo se vuelve visible y puedo seleccionar las carreras, si le doy a Derecho y hago clic en el botón, siguen apareciendo todos los datos.

    Adjunto el código:

    Código de entidad:
    package examen.dto;

    public class Examen {
    private String codigo;
    private String nombre;
    private String carrera;

    public Examen(String codigo, String nombre, String carrera) {
    this.codigo = codigo;
    this.nombre = nombre;
    this.carrera = carrera;
    }

    public Examen() {
    }

    public String getCodigo() {
    return codigo;
    }

    public void setCodigo(String codigo) {
    this.codigo = codigo;
    }

    public String getNombre() {
    return nombre;
    }

    public void setNombre(String nombre) {
    this.nombre = nombre;
    }

    public String getCarrera() {
    return carrera;
    }

    public void setCarrera(String carrera) {
    this.carrera = carrera;
    }
    }

    Código de interface
    package examen.icrud;

    import examen.dto.Examen;
    import java.util.List;

    public interface Icrud<T> {
    public void create(T e);
    List<Examen> readAll();
    List<Examen> find(String ca);
    }

    Código de modelo
    package examen.dao;

    import examen.dto.Examen;
    import examen.icrud.Icrud;
    import java.util.ArrayList;
    import java.util.List;

    public class ExamenDao implements Icrud<Examen>{

    private List<Examen> lista= new ArrayList();
    private int cont;
    public ExamenDao() {
    cont=0;
    }

    @Override
    public void create(Examen e) {
    cont++;
    e.setCodigo("A00"+cont);
    lista.add(e);
    }

    @Override
    public List<Examen> readAll() {
    return lista;
    }

    @Override
    public List<Examen> find(String ca) {
    for(Examen e:lista){
    if(e.getCurso().equals(ca)){
    lista.add(e);

    }
    }
    return lista;
    }
    }

    Código de controlador
    package examen.servicio;

    import examen.dao.ExamenDao;
    import examen.dto.Examen;
    import java.util.List;

    public class ExamenBll {
    private ExamenDao dao;

    public ExamenBll() {
    dao=new ExamenDao();
    }

    public void eRegistrar(Examen e){
    dao.create(e);
    }

    public List<Examen> eListar(){
    return dao.readAll();
    }

    public List<Examen> eBuscarxCarrera(String ca){
    return dao.find(ca);
    }
    }

    Código de vista //Esta parte tiene mucho código, así que solo voy a colocar lo importante. Aun así puede que haya dudas mientras revisan el código. Me avisan.
    List<Examen> exa=new ArrayList();
    Examen e=null;

    //Para que no haya confusiones hay código para registrar, haciendo que e deje de ser null

    Private void btnBuscar .......{
    buscarxCarrera();
    }
    private void buscarxCarrera() { //Aquí es donde está el problema
    exa=obj.eBuscarxCarrera(cmbCarrera.getSelectedItem().toString());
    if (exa != null) {
    DefaultTableModel model = (DefaultTableModel) tblExamen.getModel();
    model.setRowCount(0);
    for (Examen exa : obj.eListar()) {
    Object[] rowdata = {exa.getCodigo(), exa.getNombre(), exa.getCurso(),exa.getCiclo(),exa.getCarrera(),exa.getCreditos()};
    model.addRow(rowdata);
    }
    } else {
    JOptionPane.showMessageDialog(this, "Alumno no existe");
    }

    }

    Eso sería todo. Espero a que me ayuden a encontrar el fallo. Saludos.
     


  2. danervo

    danervo Miembro frecuente

    Registro:
    12 Ene 2011
    Mensajes:
    59
    Likes:
    7
    1. Estas guardando tu data en memoria por eso la variable lista de ExamenDao es global.
    2. Entonces en tu método find(String) de ExamenDao deberías retornar otra lista, no la variable global.
    @Override
    public List<Examen> find(String ca) {
    List<Examen> lstExamen = new ArrayList<Examen>();
    for(Examen e:lista) {
    if(e.getCurso().equals(ca)) {
    lstExamen.add(e);
    }
    }
    return lstExamen;

    3. Si persiste el error, sube tu código a un repositorio compartido(github) para ayudarte.

    Saludos,
     
  3. Raise

    Raise Miembro nuevo

    Registro:
    13 May 2014
    Mensajes:
    21
    Likes:
    1
    Sinceramente debo decir que lo sospeche desde la mitad. Mañana probaré y veré que tal. Gracias por la ayuda.
     
Etiquetas: