Jframe jtable

di il
230 risposte

230 Risposte - Pagina 4

  • Re: Jframe jtable

    In effetti hai ragione.
    magari dopo che ho sistemato il listener del check (continuo a non capire, o meglio, logicamente credo di aver capito, ma non so come fixare) inizio a preparare la tablemodel
  • Re: Jframe jtable

    Sul mio penultimo post della pagina precedente, potreste per favore dirmi perché mi da quell'errore? onestamente non lo capisco. o meglio... il codice è pari a quello del link quindi si suppone funzioni no? sostanzialmente mi dice che non essendo astratto, non può sovrascrivere un metodo astratto giusto? quindi per fixare dovrei fare una miniclasse che estende abstract giusto?
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    Sul mio penultimo post della pagina precedente, potreste per favore dirmi perché mi da quell'errore?
    public void ActionPerformed(ActionEvent e)


    va scritto esattamente actionPerformed
  • Re: Jframe jtable

    Un errore di questo tipo è esattamente il motivo per cui smisi di programmare in php anni e anni fa.
    un misero punto mi fece perdere una settimana di tempo
    grazie mille
  • Re: Jframe jtable

    Ok domanda probabilmente stupida.
    per il frame devo farmi una classe, non so, frametabella, farci i metodi che mi fanno un get dell valore o della situazione del listener e richiamarli sul tablemodel giusto?
    dopo nel main chiamo il costruttore del frame, che dovrebbe già contenere la tabella in quanto lo buildo direttamente nella classe, e son apposto giusto?
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    Un errore di questo tipo è esattamente il motivo per cui smisi di programmare in php anni e anni fa.
    Ma Java è meglio! Ti dà un bel errore in compilazione:

    does not override abstract method actionPerformed(ActionEvent)

    "quel metodo non sta facendo un override"
  • Re: Jframe jtable

    Eh ok, ma io parlavo di errori di battitura, quella A nonostante abbia letto e confrontato il listener con quello del GroupJRadioButtun, che è quasi identico, molte volte, non me ne ero proprio accorto!
  • Re: Jframe jtable

    Una volta associato un listener, per esempio allo spinner, per poter portare quel valore altrove, come dovrei fare? onestamente non lo so e non lo sto capendo.
    devo estrarlo sottoforma di token?
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    Una volta associato un listener, per esempio allo spinner, per poter portare quel valore altrove, come dovrei fare?
    Altrove dove? Un valore o lo assegni ad una variabile locale, o lo assegni ad un campo di un oggetto/classe (se accessibile, ovviamente) o lo passi in argomento ad un metodo/costruttore. Non è che ci siano altri modi ....
  • Re: Jframe jtable

    KuroKami69 ha scritto:



    @Ansharja
    io mi ero immaginato una struttura simile
    
    Object[] arrayMetodi = new Object[25];
    Object[][]data = new Object[n][25]; //dove n mi viene dato dal listener dello spinner
    arrayMetodi[0] = auto.getModello();
    arrayMetodi[1] = auto.getStato();
    arrayMetodi[2] = auto.getMarca();
    arrayMetodi[3] = auto.getColore();
    arrayMetodi[4] = auto.getTipo();
    arrayMetodi[5] = auto.getCilindri();
    arrayMetodi[6] = auto.getCavalli();
    
    //quindi essendo io babbo ho pensato così i for:
    for (int i = 0; i <= 25; i++) //colonne
    {
    for (int k = 0; k <= n; k++) //righe
    {
    data[i][k] = arrayMetodi[i]; //data[0][0,1,2,3,4 ecc] = getModello(); quindi mi popolerà tante righe quante auto creo
    }
    }
    
    avevo pensato a una cosa simile ecco.
    forse è inefficiente perché non credo mi permetta di avere una tabella dinamica, o forse si? cioè se io decido di vedere 25 auto anziché 20, o se decido di voler vedere le moto, dovrà ricrearmi la matrice da 0 e non va bene. con il metodo di andbin invece semplicemente aggiungo e tolgo righe a piacimento senza problemi

    se sto dicendo cose senza senso fermatemi per piacere!
    No, questo non puoi farlo. In arrayMetodi stai copiando i valori della singola auto, dovresti ricreare un vettore per ogni auto, che è esattamente quello che facevo nel codice con addRow (), passando un vettore creato al momento.
    Forse tu pensavi di creare una specie di vettori di metodi, che vengono applicati dinamicamente all'auto corrente, ma dimenticalo, non è quello che devi fare e non sapresti gestirlo.

    KuroKami69 ha scritto:


    Ok domanda probabilmente stupida.
    per il frame devo farmi una classe, non so, frametabella, farci i metodi che mi fanno un get dell valore o della situazione del listener e richiamarli sul tablemodel giusto?
    dopo nel main chiamo il costruttore del frame, che dovrebbe già contenere la tabella in quanto lo buildo direttamente nella classe, e son apposto giusto?
    No. Non devi fare un get della situazione del listener.
    E' quando catturi un evento che devi dire alla tabella di aggiornarsi, quindi all'interno dei metodi dei listener di cui fai l'override (quindi actionPerformed se usi il bottone refresh, o sugli altri singoli componenti se aggiungi loro dei listener per fare le modifiche "in tempo reale") dovrai leggere i valori che ti interessano (richiamando i getValue (), isSelected (), o gli altri metodi che leggono lo "stato" di un componente) e aggiornare il modello in modo opportuno.
  • Re: Jframe jtable

    @andbin usarli nella tablemodel
    @Ansharja non ho ben chiaro.
    attualmente nel listener io ottengo il valore, ma onestamente non ho la più pallida idea di come fare per aggiornare il tablemodel. mi verresti incontro con un esempio per favore?
    EDIT:
    ah devo richiamare un metodo della tablemodel giusto?
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    @andbin usarli nella tablemodel
    ah devo richiamare un metodo della tablemodel giusto?
    Dipende ... non ho capito bene cosa vuoi fare. Descrivimi lo scenario come se volessi usare il mio table model di esempio.
  • Re: Jframe jtable

    Allora io ho preparato il frame. ha 1 spinnel, con associato un listener, un button group con associato un listener, un bottone con associato un listener, e un checkbox con associato un listener.
    Ora con lo spinnel io scelgo quante auto, moto o auto e moto mostrare. Con i radio decido cosa vedere, se auto, moto, o entrambi. Con il checkbox voglio dare la possibilitá, se spuntato, di trasformare la colonna dei cavalli in kw.
    Per fare questo io ho bisogno di far arrivare i valori presi dai listener alla table model giusto? Quindi io quando associo il listener dello spinner, dentro farò una chiamata al metodo getrow() di tablemodel giusto? E via dicendo
    Spero di essermi spiegato bene
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    Per fare questo io ho bisogno di far arrivare i valori presi dai listener alla table model giusto? Quindi io quando associo il listener dello spinner, dentro farò una chiamata al metodo getrow() di tablemodel giusto? E via dicendo
    Spero di essermi spiegato bene
    Sì, direi, è chiaro cosa vuoi ottenere. E le domande che poni non sono di per sé completamente sbagliate. Nel senso che l'obiettivo è effettivamente quello di andare a controllare e gestire il table model (indipendentemente dal fatto che sia DefaultTableModel o uno personalizzato). Chiaramente con un table model personalizzato hai più flessibilità e puoi ragionare anche in maniera più object-oriented (rispetto a DefaultTableModel).

    Ma dovresti cercare di affrontare meglio l'argomento dei table model insieme anche a qualche aspetto più di "design" delle classi. Capisco che il tuo approccio è molto "empirico" e più sul pratico ma serve (purtroppo) capire anche bene certi concetti.

    Innanzitutto ti è chiaro ora il mio AutomobileTableModel di esempio? C'è ancora qualcosa che non riesci a comprendere?

    Il table model che ho scritto è molto stringato e permette molto poco. La lista di oggetti viene passata solo al costruttore dopodiché nel table model non c'è altro che permetta di alterare questa lista. Insomma è proprio solo di presentazione di una lista e basta.

    Immagina che si voglia aggiungere una riga di una nuova Automobile al fondo. Basta mettere nel table model un nuovo metodo del tipo:
    public void aggiungiAutomobile(Automobile automobile) {
        int newRow = automobili.size();
        automobili.add(automobile);
        fireTableRowsInserted(newRow, newRow);
    }
    Questo metodo è per te, che vuoi manipolare comodamente il table model. NON è per JTable (che non "sa" nulla di questo perché usa solo i metodi della interfaccia TableModel).

    Sì, è tutto qua. La struttura dati interna (quel private List<Automobile> automobili) va ovviamente aggiornata facendo il add del nuovo elemento.
    Questa però è solo una struttura dati in memoria. Nessun'altro ne "sa" nulla della modifica (meno che mai il JTable). Ecco perché serve il fireTableRowsInserted che è offerto "a gratis" da AbstractTableModel.
    Il fireTableRowsInserted serve per notificare tutti i listener registrati (e in primis JTable) che c'è una nuova riga inserita. A quel punto JTable scatenerà altre richieste verso il table model per scoprire esattamente COSA è stato aggiunto e visualizzarlo.

    Nota che prima prendo il size. Se prima c'erano 10 righe (indici validi 0 ... 9), la nuova riga è proprio all'indice 10. E quindi dico che ci sono nuove righe da 10 a 10 inclusi, in pratica una singola riga.

    Altrove, ad esempio nella classe del frame, avevo messo la variabile di istanza private AutomobileTableModel tableModel. Quindi se lì nella classe del frame gestisci un listener, sarebbe perfettamente possibile fare:

    tableModel.aggiungiAutomobile( .... una nuova automobile ... );

    Tutto qui, è questo il modo in cui si dovrebbe ragionare.
  • Re: Jframe jtable

    Ti ringrazio per la spiegazione più approfondita
    in giornata butto giù quella che dovrebbe essere la mia tablemodel. dopodiché vi posto il codice e mi dite se, a parere vostro 1) ho capito qualcosa 2) come sto andando (premetto già che prima di riuscire a pensare OOP mi serve fare almeno altri 3-4 programmi, il prossimo che farò sarà un semplice gioco della tombola con i timer. dopo proverò a dedicarmi a qualcosa di un attimo più serio che porterò avanti nel tempo, un calcolatore di danno per un determinato gioco, che mi ha chiesto un mio amico. ossia in base ai dati inseriti fornire l'output del danno del suo personaggio in date condizioni) e 3) cosa migliorare, anche cose già dette, sono una zucca dura quindi bisogna battere forte xD
Devi accedere o registrarti per scrivere nel forum
230 risposte