Newsgroup: it.comp.java
Titolo: Uso di classi clienti nelle GUI

io ho due classi SWING: A e B che sono due JFrame.
La classe principale è la A che contiene una serie di pulsanti e altri
componeti.
Se si preme un pulsante di A, automaticamente si crea la classe B e ne
visualizza il contenuto.
La classe B è composta da campi di testo e da pulsanti e altre cose.
Il problema è il seguente: come faccio dalla classe B a passare dei valori
alla classe A?
Ad esempio se nella classe B ho dei campi di testo e voglio passare il loro
contenuto alla classe A dopo aver premuto un determinato tasto in B.
Devo per caso usare una combinazione wait()-notify()?
Spero di essermi spiegato, grazie a tutti anticipatamente.
--
~~~~~~~~~~~~~~~~~~~~~~
DevShadows - il team
http://www.fastcell.it/devshadows

 B. 
molto semplicemente puoi dotare la classe A di un attributo di classe

 ha scritto nel messaggio
news:hvAD9.11556$3l.2...@twister1.libero.it...

Ciao, ho lo stesso problema, ma la risposta non mi č molto chiara. Mi
potresti fare un esempio... grazie mille

 potresti fare un esempio... grazie mille
 
per esempio
// A.java
public class A {
  public static String valAttrBClass = null;
  ....
  ....
}
valAttrBClass e' un attributo di classe, il suo valore oltre ad essere
comune a tutti gli oggetti della classe A e' disponibile anche se la
classe A non e' stata istanziata.
// B.java
public class B {
  ...
  ...
  public static void main(String[] args){
    ...
    ...
    A.valAttrBClass = "Hello ^_^";
    // chiaramente nel tuo caso dovrai adattare qualcosa di simile nel
    // Listener del JButton.
    ...
    ...
  }
}
L'esempio di sopra magari se ne impippa dell'IH ma lo puoi comunque
migliorare rendendo privata valAttrBClass e mettendo a disposizione
un metodo static per impostarla.

 contenuto alla classe A dopo aver premuto un determinato tasto in B.
Il tuo e' un problema molto comune, tanto che la soluzione e'
addirittura contemplata nei famosi "design patterns"!!!! Io te ne
illustro due: prima una "grezza e sporca" ma funzionale (nel tuo caso)
e dopo il vero e proprio pattern:
1) Alla classe B (nel costruttore) passi l'istanza della classe A,
   della quale adesso avra' il riferimento:
   public class A {
       ...
       public void setAttribute(...){
       ...
       }
       public void aMethod(..) {
       ...
          /* passo questa istanza della classe a B */
          B classB = new B(this); 
       ...
       }
   }
   public class B {
       A classAinstance;
 
       public anotherMethod() {
       ...
          classAinstance.setAttribute(5);
       }
   }
2) pattern "Observer".
   In pratica, e' quello che fa SWING con tutte le classi: ad esempio,
   la classe ActionListener "osserva" un JButton, quando vede che
   viene premuto allora si attiva eseguendo il metodo
   actionPerformed(). (la descrizione e' un po' grezza, ma spero abbia
   reso il concetto! ;-) )
   Per realizzarlo, devi "copiare" come hanno fatto le SWING: per
   prima cosa, identifica una classe "osservata" (il button, o nel tuo
   caso la classe B) ed una "osservatrice". Considera pero' il caso in
   cui, in futuro, tu voglia che anche classe C sia notificata dei
   cambiamenti di B: per questo motivo, crei un'interfaccia
   ClassBObserver (per le SWING, ci sono ActionListener & Co.) che
   tutti gli ascoltatori implementeranno. La classe A, in questo caso,
   implementera' ClassBObserver. In ClassBObserver, dichiarerai un
   metodo doSomethingWithDataFromB(...) che sara' l'equivalente del
   setAttribute() dell'esempio di prima. 
   Aggiungi alla classe osservata (B) un attributo per contenere la
   lista degli ascoltatori e due metodi per aggiungerne e rimuoverne.
   Quando B deve notificare ai suoi osservatori che e' successo cio' a
   cui erano interessati (sono pronti i dati, e' stato premuto il
   bottone "Cancella", ecc..) chiamera' su ognuno il metodo
   doSomethingWithDataFromB con tutti gli opportuni parametri.
   public interface ClassBObserver {
       public void doSomethingWithDataFromB(...);
   }
   public class A implements ClassBObserver {
      ...
      public void aMethod() {
          ...
          B observed = new B();
          // mi registro come osservatore
          B.addObserver(this);
          ...
      }
      public void doSomethingWithDataFromB(...) {
      ...
      }
   }
   public class B {
      private List observers = new LinkedList();
      public addObserver(ClassBObserver observer) {
         observers.add(observer);
      }
      public removeObserver(ClassBObserver observer) {
         observers.remove(observer);
      }
      public void aMethod(...) {
         ...
         // sono pronti i dati: diciamolo agli osservatori!
         Iterator currObs = observers.iterator();
         while (currObs.hasNext()) {
             ClassBObserver obs = (ClassBObserver)currObs.next();
             obs.doSomethingWithDataFromB(...);
         }
      }
Se fai un po' attenzione, il primo metodo altro non e' che un Observer
"ristretto"...
Spero di esserti stato utile, ciao!!!!
-- 
__/\__ * this mail has been written by Talpa Stellare
\ TS / * che da piccolo una volta e' morto.
 |/\|  * icq# 78630739 - togli i caratteri maiuscoli x e-mail

 addirittura contemplata nei famosi "design patterns"!!!! Io te ne
[...]
Ciao, mi potresti dare il link: ho provato fare svariate ricerche
sull'argomento, ma non ho trovato niente.
Grazie mille

> Il tuo e' un problema molto comune, tanto che la soluzione e'

Guarda, il riferimento (= link ;-DDDD ) ufficiale e' al libro "Design
Patterns" di Gamma & Co., cioe' l'opera originale.
Io, pero' ne ho trovato una specie di "riscrittura", cioe' un libro
che tratta tutti e ventitre' i pattern originali con esempi in
Java. Non ricordo dove, cmq il libro si chiama "The Design Pattern
Java Companion", scritto da James W. Cooper. Se cerchi su google
dovresti trovarlo.
Ciao!!


 ha scritto nel messaggio
news:o19vra...@127.0.0.1...
