Casting problems when extracting information from a ComboBox

0

I have the following code to update data in a window according to the chosen parameter in the ComboBox. The problem is that it gives me a cast error "java.lang.String cannot be cast to rosales.Rosal" and I do not know exactly where the error is or how I could fix it.

This is the action event:

private void comboNombresActionPerformed(java.awt.event.ActionEvent evt) {                                             
    Object seleccionado = comboNombres.getSelectedItem();
    Rosal unRosalSeleccionado = gestora.devuelveRosalPorNombre(seleccionado);

    ctMaximoConsulta.setText(unRosalSeleccionado.getPrecioMaximo().toString());
    ctMinimoConsulta.setText(unRosalSeleccionado.getPrecioMinimo().toString());
    if(unRosalSeleccionado.getDisponible()){
        checkBoxStockConsulta.setSelected(true);
    }
}

Where the manager is an object of the InformationManager class in which the method returnsRosalPorNombre (selected) is shown below:

public Rosal devuelveRosalPorNombre(Object seleccionado) {
    Rosal rosalSeleccionado =(Rosal) seleccionado;
    for (Rosal unRosal : losRosales) {
        if (unRosal.getNombre().equals(rosalSeleccionado.getNombre())) {
            unRosal = rosalSeleccionado;
            return unRosal;
        }
    }
    return null;
}

Here you have the Rosal class code in case you need it to clarify:

    public class Rosal implements Comparable<Rosal> {

    String nombre;
    Float precioMinimo;
    Float precioMaximo;
    Boolean disponible;

    public Rosal(String nombre, Float precioMinimo, Float precioMaximo, Boolean disponible) {
        this.nombre = nombre;
        this.precioMinimo = precioMinimo;
        this.precioMaximo = precioMaximo;
        this.disponible = disponible;
    }

    public String getNombre() {
        return nombre;
    }

    public Float getPrecioMinimo() {
        return precioMinimo;
    }

    public Float getPrecioMaximo() {
        return precioMaximo;
    }

    public Boolean getDisponible() {
        return disponible;
    }

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

    public void setPrecioMinimo(Float precioMinimo) {
        this.precioMinimo = precioMinimo;
    }

    public void setPrecioMaximo(Float precioMaximo) {
        this.precioMaximo = precioMaximo;
    }

    public void setDisponible(Boolean disponible) {
        this.disponible = disponible;
    }

    @Override
    public int compareTo(Rosal t) {
        int criterio = this.getNombre().compareTo(t.getNombre());
        return criterio;
    }

    /**
     * se considerará que un rosal es igual a otro si tiene el mismo nombre
     *
     * @param o
     * @return
     */
    @Override
    public boolean equals(Object o) {
        Rosal rosss = (Rosal) o;
        boolean criterio = false;
        if(this.getNombre().equals(rosss.getNombre())){
            criterio = true;
        }
        return criterio;
    }

    @Override
    public String toString() {
        String solucion = this.nombre+
                ";"+this.precioMinimo+
                ";"+this.precioMaximo+
                ";"+this.disponible;

        return solucion;

    }

}

Thank you very much everyone for your help in advance.

    
asked by Javier Gallegos 26.05.2018 в 12:22
source

1 answer

0

You see, what happens to you is that you are receiving a String in devuelveRosalPorNombre instead of an object type Rosal what you should do is make sure that it will be a Rosal , you can do something like this:

public Rosal devuelveRosalPorNombre(Object seleccionado) {
    if (seleccionado instanceof Rosal){//con este if te aseguras que sea una instancia de Rosal
        Rosal rosalSeleccionado =(Rosal) seleccionado;
        for (Rosal unRosal : losRosales) {
           if (unRosal.getNombre().equals(rosalSeleccionado.getNombre())) {
               unRosal = rosalSeleccionado;
               return unRosal;
           }
        }
    }
    return null;
}
    
answered by 26.05.2018 в 13:25