Ok, va bene, se il senso e l'obiettivo è questo, non ho altre obiezioni.
Certo che si può e anche in svariati modi (dai più eleganti e "puliti" a quelli più "barbari").
Ne dico giusto 2 davvero basilari (anche se non ottimali).
Chiamerò il frame con la tabella AnagraficheFrame e quello per la editazione AnagraficaEditFrame. All'interno di AnagraficheFrame da qualche parte e in un certo momento andrai sicuramente ad istanziare un AnagraficaEditFrame. Il succo è che AnagraficheFrame HA quindi di certo il riferimento all'oggetto AnagraficaEditFrame. Questa è la base.
Soluzione 1)
Quando istanzi il AnagraficaEditFrame passi al suo costruttore il riferimento al AnagraficheFrame. Questo vuol anche dire che in questo caso AnagraficaEditFrame HA il riferimento al frame AnagraficheFrame.
In AnagraficheFrame metti un metodo esposto all'esterno es. public void aggiungiAnagrafica(Anagrafica) (che come si può immaginare andrà ad inserire la anagrafica nella tabella).
In AnagraficaEditFrame avrai di certo la gestione di un ActionListener per il "Conferma". Nel actionPerformed, prenderai i dati dai componenti, creerai un Anagrafica e invocherai quel aggiungiAnagrafica sul AnagraficheFrame (perché ripeto, HAI il riferimento).
Soluzione 2)
In AnagraficaEditFrame metti un metodo esposto all'esterno es. public void addConfermaActionListener(ActionListener). Esso farà semplicemente da passacarte e passerà il ActionListener al addActionListener del JButton "Conferma".
Sempre in AnagraficaEditFrame metti un metodo esposto all'esterno es. public Anagrafica getAnagrafica() che prende i dati dai componenti, crea un Anagrafica e lo restituisce.
Poi in AnagraficheFrame implementi un ActionListener (come/dove non è molto importante) e lo passi al addConfermaActionListener invocato chiaramente sulla istanza di AnagraficaEditFrame.
Qui il succo è che quando "Conferma" viene azionato, il listener notificato è in AnagraficheFrame invece che in AnagraficaEditFrame. Il suo actionPerformed semplicemente invocherà getAnagrafica sul AnagraficaEditFrame e siamo allo stesso punto della soluzione 1, cioè in AnagraficheFrame hai un oggetto Anagrafica da inserire nella tabella.
Come vedi sono due soluzioni differenti ma con lo stesso obiettivo e risultato. Cambia solo CHI fa COSA rispetto a CHI. Queste due soluzioni non sono nulla di che ... e nemmeno davvero buone e ottimali. Sono semplicemente l'uso basilare di oggetti e riferimenti. Perché se noti è sempre un metodo (almeno uno) X invocato su un oggetto Y. Su questo non si scappa.
Cambiano invece le relazioni tra le due classi. Nel primo caso le due classi sono strettamente legate tra di loro, perché AnagraficaEditFrame SA di AnagraficheFrame e ci invoca un metodo specifico. Questo in generale non è buono.
Nel secondo caso AnagraficaEditFrame riceve da AnagraficheFrame soltanto un ActionListener (è una interfaccia), che può essere implementato in maniera differenza ma è tutto lì, non sa altro di specifico.
Se tu volessi (ri)usare AnagraficaEditFrame anche da un'altra classe es. RevisioneAnagraficheFrame, con la soluzione 2 puoi riutilizzare AnagraficaEditFrame anche in questa perché non c'è un legame così stretto. La soluzione 1 non andrebbe bene se avevi già legato AnagraficaEditFrame direttamente a AnagraficheFrame.
Ultima cosa: quello che NON dovrai mai fare è "esporre" o passare componenti grafici tra le due classi. Questo è proprio lo scenario da evitare come la peste.
Se tutto questo ti risulta chiaro, allora come si dice "sei a cavallo" e puoi sicuramente andare anche oltre. Se non ti è chiaro, rileggi il tutto e magari poni domande.![]()



Rispondi quotando