Jframe jtable

di il
230 risposte

230 Risposte - Pagina 10

  • Re: Jframe jtable

    KuroKami69 ha scritto:


    E usandolo come dici te, mi genera le eccezioni di cui sopra
    No, non dà problemi! Prendi il MIO esempio, metti il setAutoCreateRowSorter come appena detto sopra e vedrai che non causa problemi (indipendentemente che ci siano già dati o no nel table model)

    Se a te causa una eccezione, probabilmente hai "cannato" il table model o fatto qualche altra menata. E questo perché continui a non ascoltare/capire cosa ti viene detto.
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    Onestamente, a me pare infinitamente più complicato la via da te suggerita. sarà che non son esperto, ma a me pare davvero più complessa.
    proverò a sistemare come consigliato, ma ripeto, se il rowsort lo chiamo alla creazione della tabella, mi da quelle eccezioni. sull'esempio da te messo, che sostanzialmente è un estensione di quello di andbin, tu passi al tablemodel dei dati che riempiono la tabella. io la creo vuota. e quando la crei vuota, questo si domanda, cosa diamine devo ordinare se non c'è nulla? così la vedo io in base a quell'eccezione la.
    L'ho già detto che il codice che ho messo è stato già postato, ho solo fatto qualche modifica e creato un unico blocco perché tu potessi copiare e incollare in un singolo file, compilarlo ed eseguirlo in più o meno 25 secondi.

    L'hai fatto? A quanto pare no. Non viene passato alcun dato per riempire la tabella, che è vuota e non dà nessun errore.

    Se per la via più complicata ti riferisci a come costruire le automobili e le moto, fidati che quello che hai intenzione di fare tu non è così più semplice, oltre a essere una bestialità totale che non potrai mai più utilizzare (per non parlare della valutazione, ma hai già parlato del tuo prof ...).
    Al momento a te pare semplice fare come stai facendo, ma ti tiri solo addosso rogne.
  • Re: Jframe jtable

    Ok son tornato più forte di prima! si fa per dire
    ringrazio @andbin & @Ansharja per l'aiuto che mi hanno costantemente dato, devo dire che sebbene non abbia capito ancora tutto al 100%, diciamo che un buon 50% mi è abbastanza chiaro, per quanto riguarda le tabelle.
    attualmente il codice funziona tutto, quindi ho pensato bene di incasinarmi la vita (ci sto già pensando da un bel po') e volevo chiedere:
    ora la mia tabella mostra solo le auto.
    ora che ho finito di preparare la classe moto, volevo aggiungere la possibilità di poter visualizzare solo le auto, solo le moto, oppure entrambi, al cambio del radiobutton.
    per il momento i filtri non li tocco nemmeno perché ho idea che farò impazzire più voi che me, quindi per ora mi arrangio con 3 liste, una per le auto, una per le moto e una per entrambi. ho la vaga sensazione che non sia la pista giusta.
    difatti mi basterebbe semplicemente fare un removeAll alla lista ogni volta che voglio cambiare veicolo giusto?
    quindi, prendendo il codice di @andbin
    
    private List<Automobili> automobili;
    	
    	public AutomobileTableModel(List<Automobili> automobili)
    	{
    		this.automobili = automobili;
    	}
    
    mi basta rinominare questa lista e buttarci dentro tutto giusto?
    ora, non vorrei aver capito male il senso per cui chiedo
    ArrayList<Automobili> automobile = new ArrayList<Automobili>();
    questa riga qua dice che si sta creando un'array list di Automobili, ma intesi come oggetto della classe automobile giusto?
    se così non fosse, allora io posso anche chiamarla Mezzi e sono apposto no?
    voi cosa mi consigliate di fare?
  • Re: Jframe jtable

    Tre liste io non le farei, e nemmeno le rimozioni.

    Più semplice a mio parere avere una lista con tutti i veicoli e una lista che invece tiene solo i veicoli da visualizzare, userai quella lista sia per determinare il numero totale di righe, sia per passare i valori alla tabella con il getValueAt.

    Fondamentalmente la lista "completa" serve solo quando cambi la modalità di selezione: a quel punto ti conviene creare da zero la lista "filtrata", ciclando sulla lista completa e aggiungendo i veicoli all'altra lista solo se rispettano la condizione. Una volta aggiornata la lista basta usare il fireTableDataChanged ().

    Se hai una superclasse di Automobile e Moto ovviamente avrai due ArrayList <Veicolo> o come si chiama la superclasse, anche se i dati nella tabella non potranno essere così diversi se vuoi mischiarli ...
  • Re: Jframe jtable

    Ho la superclasse veicolo, che viene estesa da automobili e moto
    ti confesso che onestamente non so come fare per le liste, per questo avevo postato il mio dubbio. per me la soluzione più semplice rimane un removeAll, come proponi te la vedo molto difficile. cioè per esempio se prima visualizzo 10 auto e poi 10 moto, a quel punto la lista completa avrà 10 e 10. ma se poi voglio visualizzare altre 5 moto e infine 20 auto, avrò 10 auto 15 moto 10 auto, nella lista. credo che per fare quello che dici te si usa il retainAll giusto?
    tralasciando questo, appunto, la seconda lista la devo creare fuori nel frame tabella come l'altra giusto? poi quindi come la passo? sempre come argomento alla creazione del tablemodel? e nel table model ne metto una seconda
  • Re: Jframe jtable

    Se fai un removeAll su una singola lista, poi devi comunque mantenerti da qualche parte i veicoli rimossi, nel caso che tu li voglia rivedere in seguito.

    Non devi fare alcun metodo retainAll o robe strane, la soluzione che propongo è molto più semplice, semplicemente ricrei ogni volta che ti serve la lista dei vecoli da visualizzare, ciclando sulla lista completa e facendo un semplice add se il veicolo deve essere visualizzato.
    Questo lo fai solo quando cambia la selezione del tipo di veicolo, aggiorni la lista e mandi il fire, è molto semplice.

    La lista non va passata al table model, la creeresti internamente, il resto delle classi non deve "sapere" nulla di questo, il frame dirà semplicemente al table model di mostrare uno o l'altro veicolo, si arrangia lui a selezionare i risultati giusti.
  • Re: Jframe jtable

    Quindi proponi una cosa tipo
    for(int i = 0; i < list.size(); i++)
    if (list.(i).get() == Automobile)
    showlist.add(list(i))
    una cosa simile?
  • Re: Jframe jtable

    Fondamentalmente sì, per quell'uguale usa l'operatore instanceof, e ovviamente usa il get correttamente, quello che hai scritto non esiste . E showlist andrebbe svuotata prima del ciclo naturalmente .
  • Re: Jframe jtable

    Si, era solo un esempio buttato la mmh magari ci provo. stavo pensando di implementare 2 checkbox nuovi, uno per dare la possibilità di cambiare il funzionamento del bottone, ossia, ho lo spinner, ho il bottone visualizza, e poi metto questo checkbox che mi disabilita il bottone e abilita la lettura dinamica dello spinner, ossia mano a mano che cambio il valore dello spinner, la tabella si aggiorna. oltre che volevo metterci una piccola lista a tendina per dare la possibilità di scegliere di quanto incrementare il valore dello spinner con la freccetta. e il secondo checkbox sostanzialmente abilita il tuo metodo di visualizzazione con doppia lista, oppure il mio, con un removeall continuo, anche se questa idea mi sembra piuttosto difficile da gestire.
    mano a mano che mi avvicino alla fine mi vengono sempre in mente cose nuove da aggiungere ahahahaha
    mi piacerebbe inoltre fare in modo che nella colonna del colore, ci sia la possibilità, sempre tramite un checkbox, di passare dal colore scritto alla paletta del colore, non so se mi spiego, ma anche questo mi sembra un attimo troppo difficile per me ahahahah
    tutte queste cose solo per fare pratica con listener e fire vari, in modo da capirli un attimo meglio, e ovviamente per dare quel tocco in più al lavoro
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    volevo aggiungere la possibilità di poter visualizzare solo le auto, solo le moto, oppure entrambi
    Se nel caso di lista con auto+moto contenuti, il table model deve esporre solo le colonne comuni ad auto/moto .... è davvero banale. Ma serve una super-classe comune di auto e moto, es. Veicolo.
    E se al table model devi passare un List<Automobile> o un List<Moto> (e non un più generico List<Veicolo>) allora serve anche sfruttare i "bounds" con i generics per le liste.

    KuroKami69 ha scritto:


    per il momento i filtri non li tocco nemmeno perché ho idea che farò impazzire più voi che me
    ho paura ... di sì ...

    KuroKami69 ha scritto:


    quindi per ora mi arrangio con 3 liste, una per le auto, una per le moto e una per entrambi. ho la vaga sensazione che non sia la pista giusta.
    infatti ..
  • Re: Jframe jtable

    Però scusami, non ho ben capito il fatto della lista
    per creare una lista che possa contenere sia auto che moto, deve essere una lista di oggetti generica, oppure una lista di veicoli (la mia superclasse)? quindi List<Object> oppure List<Veicoli>?
    mmh andando a modificare il frametabella
    ArrayList<Automobili> automobile = new ArrayList<Automobili>();
    questo diventa, sempre nel frametabella
    ArrayList<Veicoli> veicolo = new ArrayList<Veicoli>();
    mentre nel tablemodel questo
    private List<Automobili> automobili;
    diventa
    private List<Veicoli> veicoli;
    e di conseguenza, seguendo il suggerimento di @Ansharja, ne dovrò fare un'altra di questo tipo
    private List<Veicoli> showlist;
    giusto?
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    Però scusami, non ho ben capito il fatto della lista
    per creare una lista che possa contenere sia auto che moto, deve essere una lista di oggetti generica, oppure una lista di veicoli (la mia superclasse)? quindi List<Object> oppure List<Veicoli>?
    Se Veicolo è super-classe di Automobile e Moto, allora una qualunque collezione <Veicolo> può contenere SIA oggetti Automobile, SIA oggetti Moto, in modo completamente promiscuo.

    KuroKami69 ha scritto:


    questo diventa, sempre nel frametabella
    ArrayList<Veicoli> veicolo = new ArrayList<Veicoli>();
    mentre nel tablemodel questo
    diventa
    private List<Veicoli> veicoli;
    Il punto è: se a te basta solo inserire oggetti Automobile/Moto in un List<Veicolo> e poi NON li devi estrarre per riavere il tipo specifico (cosa che richiede un cast) e il table model "sa" solo delle proprietà in Veicolo che sono comuni ad entrambi, allora sì, puoi ragionare solo con parametrizzazioni <Veicolo>.
    Se ti serve uno scenario differente, va valutato.
  • Re: Jframe jtable

    Ho messo tutti i metodi e le variabili in veicoli, tranne i get e i costruttori che sono nelle rispettive classi, se è questo che intendi.
    ammetto che però cercando di scrivere il codice, non mi trovo affatto.
    provo a fare qualcosa ma ho idea che sarà sbagliato
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    Ho messo tutti i metodi e le variabili in veicoli, tranne i get e i costruttori che sono nelle rispettive classi, se è questo che intendi.
    "nì". E comunque detto così suona (molto) male. Quando fai una classe, ci metti campi e relativi metodi setter e/o getter. Se fai una sotto-classe che ha qualche campo in più, metti i setter e/o getter solo per questi suoi campi.
    Non ha senso mettere dei campi nella super-classe e poi i getter nella sotto-classe! Anche perché così i campi devono essere "visibili" alla sotto-classe e questo vuol dire che stai "rompendo" l'incapsulamento (e senza una motivazione valida).

    'ste cose ti devono essere chiare .... altrimenti non vai avanti ..
  • Re: Jframe jtable

    Effettivamente non ha senso
    quindi vuoi dire che la mia sottoclasse avrà solo il costruttore?
Devi accedere o registrarti per scrivere nel forum
230 risposte