Visualizzazione dei risultati da 1 a 10 su 18

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    42
    ma la cosa strana è che, non so per quale strano motivo, in una prima implementazione funzionava! Ad esempio se cancellavo un giocatore che era capitano, automaticamente veniva aggiornata la tabella squadre settando a "" il capitano.
    comunque, ho seguito il tuo consiglio e ho fatto ritornare (isCellEditable) false alla colonna capitano.


    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? Eppure non ho inserito alcun eventHandler... e soprattutto lo fa senza perdere la selezione (nel caso di passaggio del mouse sui TAB).
    eppure all'inizio funzionava... Cioè la tabella veniva aggiornata in modo automatico...
    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.
    Ultima modifica di MBdip; 18-06-2014 a 15:18

  2. #2
    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

  3. #3
    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

  4. #4
    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

  5. #5
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.