I tuoi esempi sono stati illuminanti! Ti ringrazio
il problema dell'oggetto di questa discussione è stato risolto.
ora però avrei un problemino legato ai tuoi esempi e al modo in cui ho implementato l'interfaccia.
praticamente ho due tabelle affiancate, la tabella di destra modifica un campo della tabella di sinistra cliccando su un bottone.
Non posso ristampare la tabella altrimenti perdo la Riga selezionata.
La tabella di sinistra viene aggiornata nel momento in cui cricco su una riga della stessa oppure nel momento in cui passo con il mouse sui tab del jTabbedPane... Eppure non ho nessun evento di tipo mousehover...
Come faccio a tenere aggiornata la tabella dinamicamente? (Non so per quale motivo ma appena avevo implementato le tabelle, quando cliccavo sul bottone veniva aggiornata senza perdere la selezione)

vi posto un po' di codice:
modello per la tabella squadre
codice:
class SquadreTableModel extends AbstractTableModel {
private final String[] columnNames = { "NOME", "CAPITANO" };
private final ArrayList<Squadra> squadre;
public SquadreTableModel(ArrayList<Squadra> squadre) {
this.squadre = squadre;
}
@Override
public int getRowCount() {
return squadre.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public boolean isCellEditable(int row, int column) {
return true;
}
@Override
public Object getValueAt(int row, int column) {
Squadra squadra = squadre.get(row);
switch (column) {
case 0: return squadra.getNome();
case 1: return squadra.getCapitano().getNome()+" "+squadra.getCapitano().getCognome();
}
return null;
}
@Override
public void setValueAt(Object value, int row, int column) {
Squadra squadra = squadre.get(row);
switch (column) {
case 0: squadra.setNome((String)value); break;
}
fireTableCellUpdated(row, column);
}
}
modello per la tabella componenti:
codice:
class ComponentiTableModel extends AbstractTableModel {
private final String[] columnNames = { "NOME", "COGNOME", "CODICE FISCALE" };
private final ArrayList<Giocatore> componenti;
public ComponentiTableModel(ArrayList<Giocatore> componenti) {
this.componenti = componenti;
}
@Override
public int getRowCount() {
return componenti.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
@Override
public Object getValueAt(int row, int column) {
Giocatore giocatore = componenti.get(row);
switch (column) {
case 0: return giocatore.getNome();
case 1: return giocatore.getCognome();
case 2: return giocatore.getCF();
}
return null;
}
}
metodo per aggiornare le tabelle a seconda del tab scelto
codice:
private void AggiornaInterfaccia() {
ArrayList lista_giocatori=database.get_ArchivioGiocatori().getGiocatori();
ArrayList lista_squadre=database.get_ArchivioSquadre().getSquadre();
ArrayList lista_partite=database.get_ArchivioPartite().getPartite();
switch (tabMain.getSelectedIndex()) {
case 0:
// Aggiorno elenco giocatori
GiocatoriTableModel model0= new GiocatoriTableModel(lista_giocatori);
jTableGio.setModel(model0);
break;
case 1:
// Aggiorno elenco squadre
SquadreTableModel model1=new SquadreTableModel(lista_squadre);
jTableSqu.setModel(model1);
jButtonImpostaCapitano.setVisible(false);
update_componenti();
break;
case 2:
// Aggiorno elenco partite
PartiteTableModel model2=new PartiteTableModel(lista_partite);
jTablePar.setModel(model2);
break;
}
}
metodo per aggiornare i componenti della squadra
codice:
private void update_componenti(){
int rowIndex = jTableSqu.getSelectedRow();
ArrayList lista_componenti;
if(rowIndex>=0){
Squadra squadra = database.get_ArchivioSquadre().getSquadre().get(rowIndex);
lista_componenti=squadra.get_componenti();
ComponentiTableModel model0= new ComponentiTableModel(lista_componenti);
jTableSquComponenti.setModel(model0);
jButtonImpostaCapitano.setVisible(squadra.get_componenti().size()>0);
}
}
pulsante per impostare il capitano
codice:
private void jButtonImpostaCapitanoActionPerformed(java.awt.event.ActionEvent evt) {
int rowIndex=jTableSquComponenti.getSelectedRow();
int rowSquadraIndex =jTableSqu.getSelectedRow();
if(rowIndex<0)
lblMessage.setText(Errori.errSelezionareRiga);
else{
Squadra s=database.get_ArchivioSquadre().getSquadre().get(rowSquadraIndex);
Giocatore g=s.get_componenti().get(rowIndex);
s.setCapitano(g);
}
}