JList Seleccionar lista del Objeto AYUDA!

Tengo problemas para capturar objeto de un jlist seleccionado. Deje una imagen de como es el diseño

public class ModeloJListCiudad extends AbstractListModel {

    List<Ciudad> listaciudad;
    Ciudad ciudad;

    public ModeloJListCiudad(List<Ciudad> listaciudad){
        this.listaciudad = listaciudad;
    }
    @Override
    public int getSize() {
        return listaciudad.size();
    }
   
    @Override
    public Object getElementAt(int index) {
        return listaciudad.get(index).toString();
    }  

    public void setSelectedItem(Object o){
        if (o != null && listaciudad.size() > 0){
            for (Ciudad m : listaciudad){
                if (m.toString().equals(o.toString())){
                    ciudad = m;
                    break;
                }
            }
        }
    }
   
    public Object getSelectedItem() {
        return ciudad;
    }
}

Clase Zonas

public class Zonas {
    private long idzona;
    private String zona;
    private Set zonas_sectores = new HashSet(0);

    public Zonas() {
    }

    public Zonas(String zona) {
        this.zona = zona;
    }

    public long getIdzona() {
        return idzona;
    }

    public void setIdzona(long idzona) {
        this.idzona = idzona;
    }

    public String getZona() {
        return zona;
    }

    public void setZona(String zona) {
        this.zona = zona;
    }

    public Set getZonas_sectores() {
        return zonas_sectores;
    }

    public void setZonas_sectores(Set zonas_sectores) {
        this.zonas_sectores = zonas_sectores;
    }

    @Override
    public String toString() {
        return zona;
    }
   
   
}

Clase Pais

public class Pais implements Serializable{

    long idpais;
    String pais;
    private Set ciudades = new HashSet(0);

    public Pais() {

    }

    public Pais(String pais, Set ciudades) {
        this.pais = pais;
    }

    public long getIdpais() {
        return idpais;
    }

    public void setIdpais(long idpais) {
        this.idpais = idpais;
    }

    public String getPais() {
        return pais;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }

    public Set getCiudades() {
        return this.ciudades;
    }

    public void setCiudades(Set ciudades) {
        this.ciudades = ciudades;
    }

    @Override
    public String toString() {
        return pais;
    }
}

Clase Ciudad

public class Ciudad implements Serializable {

    long idciudad;
    String ciudad;
    Pais pais;
    private Set municipios = new HashSet(0);

    public Ciudad() {

    }

    public Ciudad(Pais pais, String ciudad, Set municipios) {
        this.pais = pais;
        this.ciudad = ciudad;
        this.municipios = municipios;
    }

    public long getIdciudad() {
        return idciudad;
    }

    public void setIdciudad(long idciudad) {
        this.idciudad = idciudad;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public Pais getPais() {
        return pais;
    }

    public void setPais(Pais pais) {
        this.pais = pais;
    }

    public Set getMunicipios() {
        return this.municipios;
    }

    public void setMunicipios(Set municipios) {
        this.municipios = municipios;
    }

    @Override
    public String toString() {
        return ciudad;
    }

}

Clase Zona_Sectores

public class Zonas_Sectores {
   
    private long idzona_sector;
    private Zonas zona;
    private Sector sector;

    public Zonas_Sectores() {
    }

    public Zonas_Sectores(Zonas zona, Sector sector) {
        this.zona = zona;
        this.sector = sector;
    }

    public long getIdzona_sector() {
        return idzona_sector;
    }

    public void setIdzona_sector(long idzona_sector) {
        this.idzona_sector = idzona_sector;
    }

    public Zonas getZona() {
        return zona;
    }

    public void setZona(Zonas zona) {
        this.zona = zona;
    }

    public Sector getSector() {
        return sector;
    }

    public void setSector(Sector sector) {
        this.sector = sector;
    }
   
}

DAO Sector

public class SectorDAO {

    private Session sesion;
    private Transaction tx;

    public boolean guardarSector(Sector sector) throws HibernateException {

        boolean resp = false;
        try {
            iniciarOperacion();
            //tr.setTimeout(2);
            sesion.save(sector);
            tx.commit();
            resp = true;
        } catch (HibernateException he) {
            tx.rollback();
            he.printStackTrace();
            resp = false;
            throw he;
        } finally {
            if (sesion.isOpen()) {
                sesion.close();
            }
        }
        return resp;
    }

    public boolean actualizarSector(Sector sector) throws HibernateException {

        boolean resp = false;
        try {
            iniciarOperacion();
            //tr.setTimeout(2);
            sesion.saveOrUpdate(sector);
            tx.commit();
            resp = true;
        } catch (HibernateException he) {
            tx.rollback();
            he.printStackTrace();
            resp = false;
            throw he;
        } finally {
            if (sesion.isOpen()) {
                sesion.close();
            }
        }
        return resp;
    }

    public boolean eliminarSector(Sector sector) throws HibernateException {

        boolean resp = false;
        try {
            iniciarOperacion();
            //tr.setTimeout(2);
            sesion.delete(sector);
            tx.commit();
            resp = true;
        } catch (HibernateException he) {
            tx.rollback();
            he.printStackTrace();
            resp = false;
            throw he;
        } finally {
            if (sesion.isOpen()) {
                sesion.close();
            }
        }
        return resp;
    }

    public long maxIdSector() {

        long maxid = 0;
        try {
            this.iniciarOperacion();
            maxid = (long) sesion.createCriteria(Sector.class)
                    .setProjection(Projections.max("idsector")).uniqueResult();
        } catch (HibernateException he) {
            throw he;
        } finally {
            if (sesion.isOpen()) {
                sesion.close();
            }
        }
        return maxid;
    }

    public List<Sector> Listar(Municipio municipio) {

        List<Sector> lista = null;
        try {
            iniciarOperacion();
            tx.setTimeout(2);
            lista = sesion.createCriteria(Sector.class).setFetchMode("municipio", FetchMode.JOIN).
                    add(Restrictions.eq("municipio.idmunicipio", municipio.getIdmunicipio())).addOrder(Order.asc("idsector")).list();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sesion.isOpen()) {
                sesion.close();
            }
        }
        return lista;
    }

    public List<Sector> ListarStringnotExists(String municipio) {

        List<Sector> lista = null;
        try {
            iniciarOperacion();
            tx.setTimeout(2);

            DetachedCriteria query = DetachedCriteria.forClass(Zonas_Sectores.class, "zs")
                    .setProjection(Property.forName("zs.idsector"))
                    .add(Property.forName("zs.idsector").eqProperty("s.idsector"));

            lista = sesion.createCriteria(Sector.class, "s")
                    .createAlias("s.municipio", "m")
                    .add(Restrictions.eq("m.municipio", municipio))
                    .add(Subqueries.notExists(query))
                    .list();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sesion.isOpen()) {
                sesion.close();
            }
        }
        return lista;
    }
   
    public List<Sector> ListarStringExists(String municipio) {

        List<Sector> lista = null;
        try {
            iniciarOperacion();
            tx.setTimeout(2);

            DetachedCriteria query = DetachedCriteria.forClass(Zonas_Sectores.class, "zs")
                    .setProjection(Property.forName("zs.idsector"))
                    .add(Property.forName("zs.idsector").eqProperty("s.idsector"));

            lista = sesion.createCriteria(Sector.class, "s")
                    .createAlias("s.municipio", "m")
                    .add(Restrictions.eq("m.municipio", municipio))
                    .add(Subqueries.exists(query))
                    .list();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sesion.isOpen()) {
                sesion.close();
            }
        }
        return lista;
    }
    public void iniciarOperacion() throws HibernateException {

        sesion = HibernateUtil.getSessionFactory().openSession();
        tx = sesion.beginTransaction();
    }

    public void manejaException(HibernateException he) throws HibernateException {

        tx.rollback();
        throw new HibernateException("Ocurrio un error en la capa de acceso a datos. ", he);
    }
}

Parte del Codigo donde trato llenar el JList de Ciudad mediante el objeto seleccionado en el JList de Pais

    public void llenaJComboBoxZonas() {

        List<Zonas> p = zonasdao.listadozonas();
        cbxZona.setModel(new ModeloComboboxZonas(p));
    }

    public void llenaJListPais() {
        List<Pais> p = pd.listadopais();
        jltPais.setModel(new ModeloJListPais(p));
    }

------------Esta es la parte donde no me captura el objeto de la clase Pais-------------------
    public void llenaJListCiudad() {

        Object objeto = jltPais.getSelectedValue();

        if (objeto instanceof Pais) {
            Pais pp = (Pais) objeto;
            if (pp == null) {
                JOptionPane.showMessageDialog(this, "No captura objeto");
            } else {
                jltCiudad.setModel(new ModeloJListCiudad(cd.ListarString(pp)));
            }
        }

    }

    private void jltPaisValueChanged(javax.swing.event.ListSelectionEvent evt) {                                    
        llenaJListCiudad();
    }

    private void cbxZonaItemStateChanged(java.awt.event.ItemEvent evt) {                                        
            llenaJListPais();
    }

AdjuntoTamaño
asigzonar.jpg58.35 KB