Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da MBdip Visualizza il messaggio
    non ho idea di dove mettere default: return;.
    Io intendevo:

    codice:
    public void setValueAt(Object value, int row, int column) {
        Squadra squadra = squadre.get(row);
    
        switch (column) {
            case 0: squadra.setNome((String)value); break;
            default: return;
        }
        fireTableCellUpdated(row, column);
    }
    Quote Originariamente inviata da MBdip Visualizza il messaggio
    Perdonami la domanda, ma per quale motivo (dopo aver impostato nuovo capitano o cancellato il giocatore capitano) se passo col mouse sui tab del jTabbedPane oppure se clicco sulla tabella, Quest'ultima viene aggiornata?
    come fa a "sapere" che è cambiato qualcosa?
    No, infatti non è questione di "sapere" che qualcosa è stato modificato. Si tratta al massimo di un semplice "repaint". Ma se un repaint (per qualunque motivo) arriva alla tabella, allora vengono sicuramente coinvolti i renderer, che quindi riprendendo i dati dal model di fatto aggiornano visivamente i dati.

    Quote Originariamente inviata da MBdip Visualizza il messaggio
    Non ci sarebbe un modo per rendere la tabella dinamica? Cioè, Se modifico qualcosa in un'altra finestra, viene modificata la tabella che legge direttamente le modifiche dell'arraylist.
    È solo questione di "parlare" direttamente con i table model. Che chiaramente possono/devono offrire i metodi specifici per operare le varie modifiche.

    Ad esempio visto che prima avevi scritto:

    codice:
                Squadra s=database.get_ArchivioSquadre().getSquadre().get(rowSquadraIndex);
                Giocatore g=s.get_componenti().get(rowIndex);
                s.setCapitano(g);

    Volendo continuare a gestire la cosa così, si poteva anche fare in una maniera effettivamente ancora più semplice, ovvero mettere in SquadreTableModel un nuovo metodo:

    public void setSquadra(int row, Squadra squadra)

    che aggiorna la struttura dati e notifica i cambiamenti. E sarebbe in effetti anche più generico e più in linea con il concetto del table model, rispetto al setCapitano che immaginavo prima.

    E in SquadreTableModel puoi aggiungere altri metodi ancora:

    public void addSquadra(Squadra squadra)
    public void removeSquadra(int row)
    ecc....

    Insomma puoi mettere tutti i metodi che sono sensati per le operazioni che devi poter applicare.
    Ultima modifica di andbin; 18-06-2014 a 15:24
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #12
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    42
    scusa, era da due giorni cheaspettavo la risposta sulla pagina precedente e non avevo visto che c'era una seconda pagina…

    Comunque a quanto ho capito, mi disse cercando di dire di gestire tutte le funzionalità dei pulsanti dell'interfaccia non attraverso le classi interne del programma ma attraverso l'interfaccia stessa(in questo caso le tabelle).
    non ho però compreso il metodo setSquadra… O meglio, come deve essere implementato per fare ciò che dici?

    e poi ancora, come faccio a richiamare un metodo dello specifico TableModel? Se chiamo tabella.getModel().metodoCreato() viene restituito errore...
    Ultima modifica di MBdip; 20-06-2014 a 10:13

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da MBdip Visualizza il messaggio
    non ho però compreso il metodo setSquadra… O meglio, come deve essere implementato per fare ciò che dici?
    I metodi di TableModel servono principalmente a JTable. Ma tu hai piena facoltà (e in certi scenari come il tuo è utile) di aggiungere tutti i metodi specifici per operare in maniera più strutturata/consona sugli oggetti nel table model.

    Quindi metodi es. setSquadra, addSquadra, removeSquadra, removeAll ......

    setSquadra è banale, l'unica particolarità è il fireXXX da scegliere, visto che con un set del genere possono cambiare potenzialmente i dati di tutte le colonne nella riga settata:

    codice:
    class SquadreTableModel extends AbstractTableModel {
    
        private final  ArrayList<Squadra> squadre;
    
    
        public void setSquadra(int row, Squadra squadra) {
            squadre.set(row, squadra);
            fireTableRowsUpdated(row, row);   // notifica che è cambiata tutta la riga (potenzialmente tutte le colonne)!
        }
    
        .....
    }
    Quote Originariamente inviata da MBdip Visualizza il messaggio
    e poi ancora, come faccio a richiamare un metodo dello specifico TableModel? Se chiamo tabella.getModel().metodoCreato() viene restituito errore...
    Perché getModel() ha tipo di ritorno TableModel, attraverso cui non puoi ovviamente "vedere" i metodi nuovi che hai definito in una implementazione specifica.
    Se tu sai che l'oggetto è realmente un SquadreTableModel, puoi fare un cast (tanto sai tu che non fallirà a runtime):

    ((SquadreTableModel) tabella.getModel()).metodoCreato()

    Ma così non è molto bello e pulito e ... dovresti oltretutto farlo ogni volta. La cosa più semplice e sensata è quella di tenerti da parte un campo apposito con il riferimento al tuo table model specifico. Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #14
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    42
    hai ragione, mi ero proprio dimenticato di poter fare cast.
    Anche se
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La cosa più semplice e sensata è quella di tenerti da parte un campo apposito con il riferimento al tuo table model specifico. Tutto qui.
    non comprendo cosa voglia dire, magari potrebbe essere la risposta alla mia prossima domanda:
    in quale occasione devo chiamare il metodo setSquadra? perché come hai specificato nella fase quotata non è molto bello e pulito fare cast ogni volta

    p.s.
    nonostante avessi creato il metodo setCapitano all'interno del modello, se lo chiamavo la tabella comunque non veniva aggiornata. Ho dovuto comunque aggiungere il metodo setSquadra per far sì che venisse aggiornata la riga della squadra.
    Quindi alla fine basterebbe chiamare il fireTableRowsUpdatedsu un campo dopo la modifica per far aggiornare lo stesso se non sbaglio. Ovviamente all'interno del modello.
    Ultima modifica di MBdip; 20-06-2014 a 15:13

  5. #15
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da MBdip Visualizza il messaggio
    non comprendo cosa voglia dire, magari potrebbe essere la risposta alla mia prossima domanda:
    codice:
    private SquadreTableModel squadreTableModel;
    in un'altra parte della tua applicazione dove chiaramente hai e gestisci i vari componenti, tabelle, ecc....

    Quote Originariamente inviata da MBdip Visualizza il messaggio
    in quale occasione devo chiamare il metodo setSquadra?
    Quando (per qualunque motivo) vuoi cambiare una riga della tabella.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    42
    Quote Originariamente inviata da andbin Visualizza il messaggio
    codice:
    private SquadreTableModel squadreTableModel;
    intendi operare sul modello anzichè sulla tabella?
    esempio

    codice:
    private void jButtonImpostaCapitanoActionPerformed(java.awt.event.ActionEvent evt) {
    
            int rowIndex=jTableSquComponenti.getSelectedRow();
            int rowSquadraIndex =jTableSqu.getSelectedRow();
    /******/SquadreTableModel squadreTableModel= (SquadreTableModel)jTableSqu.getModel();/***/
            if(rowIndex<0)
                lblMessage.setText(Errori.errSelezionareRiga);
            else{
                Squadra s=database.get_ArchivioSquadre().getSquadre().get(rowSquadraIndex);
                Giocatore g=s.get_componenti().get(rowIndex);
    /*********/ squadreTableModel.setCapitano(s,g);/*********************************/
            }
        }
    Ultima modifica di MBdip; 20-06-2014 a 16:22

  7. #17
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da MBdip Visualizza il messaggio
    intendi operare sul modello anzichè sulla tabella?
    Appunto dovresti, certo, operare sul model. Dentro il model puoi modellare le cose come meglio credi (es. il fatto di aver implementato un table model che contiene un ArrayList<Squadra>) e da lì puoi "esporre" le operazioni che servono e sono utili al resto della applicazione.
    Su JTable direttamente c'è relativamente ben poco che puoi fare riguardo i dati e oltretutto gli indici di riga/colonna sono nella "view" ... non direttamente sul model (possono differire).


    Quote Originariamente inviata da MBdip Visualizza il messaggio
    codice:
    private void jButtonImpostaCapitanoActionPerformed(java.awt.event.ActionEvent evt) {
    
            int rowIndex=jTableSquComponenti.getSelectedRow();
            int rowSquadraIndex =jTableSqu.getSelectedRow();
    /******/SquadreTableModel squadreTableModel= (SquadreTableModel)jTableSqu.getModel();/***/
            if(rowIndex<0)
                lblMessage.setText(Errori.errSelezionareRiga);
            else{
                Squadra s=database.get_ArchivioSquadre().getSquadre().get(rowSquadraIndex);
                Giocatore g=s.get_componenti().get(rowIndex);
    /*********/ squadreTableModel.setCapitano(s,g);/*********************************/
            }
        }
    codice:
    squadreTableModel.setSquadra(rowSquadraIndex, s);

    invece di quel setCapitano
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #18
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    42
    ok, capito. ti ringrazio molto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.