KuroKami69 ha scritto:
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
Veicolo veicolo = (Veicolo)veicoli.get(rowIndex);
switch(columnIndex)
{
case 0: return veicolo.getMarca();
case 1: return veicolo.getModello();
case 2: return veicolo.getStato();
case 3: return veicolo.getPrezzo();
case 4: return veicolo.getTipo();
case 5: return veicolo.getColore();
case 6: return veicolo.getKm();
case 7: return veicolo.getAnnoImmatricolazione();
case 8: return veicolo.getScadenzaBollo();
case 9: return veicolo.getTarga();
case 10: if(mode.equals("auto"))
{
Automobile automobile = (Automobile)veicoli.get(rowIndex);
return automobile.getPosti();
}
else return "/";
case 11: if(mode.equals("auto"))
{
Automobile automobile = (Automobile)veicoli.get(rowIndex);
return automobile.getPortiere();
}
else return "/";
case 12: if(mode.equals("auto"))
{
Automobile automobile = (Automobile)veicoli.get(rowIndex);
return automobile.getBagagliaio();
}
else return "/";
case 13: return veicolo.getCilindrata();
case 14: return veicolo.getCilindri();
case 15: if (c == false) return veicolo.getCavalli();
else return veicolo.conversioneCK(veicolo.getCavalli());
case 16: return veicolo.getRapportoPP();
case 17: return veicolo.getMotore();
case 18: return veicolo.getConsumo();
case 19: if(mode.equals("auto"))
{
Automobile automobile = (Automobile)veicoli.get(rowIndex);
return automobile.getTrazione();
}
else return "/";
case 20: return veicolo.getCambio();
case 21: return veicolo.getMarce();
case 22: if(mode.equals("auto"))
{
Automobile automobile = (Automobile)veicoli.get(rowIndex);
return automobile.getLunghezza();
}
else return "/";
case 23: return veicolo.getMassaVuoto();
case 24: if(mode.equals("auto"))
{
Automobile automobile = (Automobile)veicoli.get(rowIndex);
return automobile.getAltezzaTerra();
}
else return "/";
case 25: if(mode.equals("auto"))
{
Automobile automobile = (Automobile)veicoli.get(rowIndex);
return automobile.getTettuccio();
}
else if(mode.equals("moto"))
{
Moto moto = (Moto)veicoli.get(rowIndex);
return moto.getParabrezza();
}
else return "/";
default: return null;
}
}
Questo codice ti funziona? Ne dubito, almeno che tu non stia già filtrando le righe e rimuovendo i tipi non corrispondenti.
Altrimenti, se mode è uguale ad "auto", nessuno ti assicura che l'oggetto all'indice rowIndex della lista veicoli sia un automobile (e viceversa), devi fare il controllo con instanceof, altrimenti il cast ti fallisce alla prima occasione in cui trovi un oggetto di tipo Moto ...
E comunque io ti consiglierei di fare il cast una singola volta, una volta che sai di non dover ritornare una "colonna comune": prima controlli che tipo di veicolo hai (instanceof), poi fai il cast, e poi controlli l'indice di colonna per ritornare il risultato del metodo corretto (in pratica gli switch vanno a un certo punto inseriti dentro a degli if). Non è obbligatorio ma sicuramente più veloce, e ti consente di usare l'instanceof solo due volte.
KuroKami69 ha scritto:
Premettendo che
public enum DisplayMode
{
AUTO_E_MOTO,
AUTO_ONLY,
MOTO_ONLY
}
il metodo che ha fatto @Ansharja
public DisplayMode setDisplayMode(DisplayMode mode)
{
return currentDisplayMode;
}
prende in ingresso un enum giusto? se è così, perché quando ho provato a passargli tipo DisplayMode.AUTO_ONLY, o anche solo AUTO_ONLY, mi ha dato errore, incompatyble type, o una roba simile?
(anche se dopo lo avevo cambiato, e riprovato gli stessi abbinamenti in ingresso, in questo modo)
private DisplayMode currentDisplayMode;
public void setDisplayMode(DisplayMode mode)
{
this.currentDisplayMode = mode;
}
e non funzionava uguale
Però il primo set che hai scritto ormai dovresti avere capito che non ha alcun senso! Cioè tu passi un parametro al metodo set, non lo utilizzi all'interno per settare la variabile, e poi ritorni il valore della variabile a cui dovevi settarlo? Praticamente è un get scritto male ...
Il secondo set che hai scritto, che ritorna void e fa l'assegnazione all'interno è corretto. Prende in ingresso un elemento della enum quindi, se l'enum l'hai definita come sopra, è corretto passare al metodo
DisplayMode.AUTO_ONLY, non puoi omettere il nome della enum,
AUTO_ONLY da solo non puoi usarlo (puoi farlo ad esempio all'interno dei vari case di uno switch).
Se non posti l'errore con la riga coinvolta è un po' difficile capire quale sia la causa, ma penso sia probabile che tu stavi provando ad assegnare il risultato del primo metodo che hai scritto (che come detto NON deve avere un tipo di ritorno) a una variabile di un tipo diverso.
Quindi una volta corretta la definizione del set, quando lo richiami senza assegnare a nulla il risultato (è VOID!) non dovresti avere un errore.
Se così non è posta il messaggio, altrimenti si capisce poco ...