Newsgroup: it.comp.java
Titolo: Comunicazione tra classi

Ciao a tutti,
ho un problema e non so come risolverlo.
Lavorando con SWING, supponete di avere una classe MioFrame che estende
JFrame.
Questa classe crea un'istanza di una classe MioPanel e l'aggiunge al
contentPane
MioPanel mp = new MioPanel
MioFrame.getContentPane.add(mp, layout)
Come posso, all'interno della classe MioPanel, comunicare con componenti
della classe MioFrame?
Mi spiego meglio, supponiamo che io abbia un botone all'interno della classe
MioPane. Io voglio che questo bottone, una volta premuto, mi colori di rosso
una label presente nella classe MioFrame. Come posso fare?
Grazie a tutti.

 Grazie a tutti.
In MioPane crea un riferimento a MioFrame e assegna un costruttore del tipo
public class MioPane extends JPanel{
 ...
 MioFrame contentFrame;
 ...
 public MioPane( MioFrame frame){
  ...
  contentFrame = frame;
  ...
 }
....
}

 ha scritto nel messaggio
news:9qc5d.7528$H11.2...@twister1.libero.it...

La prima cosa che mi viene in mente č crearmi un oggetto dentro MioPanel
che mi tiene semplicemente il riferimento al frame circostante oppure
alla label e basta.
Mi modificherei il costruttore di MioPanel. Insomma per fare un esempio
stupido:
CLASSE MIOFRAME:
---------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class MioFrame extends JFrame{
        JLabel etichetta;
        public MioFrame()
        {
                MioPanel panel = new MioPanel(this);
                etichetta = new JLabel("Cambierň");
                BorderLayout disposizione = new BorderLayout();
                this.getContentPane().setLayout(disposizione);
                this.getContentPane().add(etichetta,BorderLayout.SOUTH);
                this.getContentPane().add(panel,BorderLayout.CENTER);
                this.setSize(300,300);
        }
public void setEtichetta(Color nuovo)
        {  etichetta.setForeground(nuovo);  }
public static void main(String [] paperino)
{ MioFrame obj = new MioFrame();
   obj.show(); }
}
--------------
CLASSE MIOPANEL:
------------------------
import java.awt.*;
import java.awt.color.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class MioPanel extends JPanel {
        MioFrame finestra;
        public MioPanel(MioFrame obj)
        {
                finestra = obj;
                JButton bottone = new JButton("Cliccami");
                GridLayout griglia = new GridLayout(1,1);
                bottone.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent e )
                        {
                                finestra.setEtichetta(Color.GREEN);
                        }
                });
              this.add(bottone);
              this.setLayout(griglia);
        }
}
--------------------------
Stavi parlando di un "effetto" del genere, vero?
Spero di averti aiutato. Questa č la prima soluzione che mi č saltata in
testa, e non so quanto sia lecita... spero che qualcuno di piů esperto
intervenga a darci conferme ;)
Buon Proseguimento!
- Simone -

Ego wrote:

Come gestisci gli eventi?
Nel senso che se per esempio il tuo JFrame implementa ActionListener, 
molto semplicemente puoi creare MioPanel, poi accedere al bottone 
(MioPanel.MioBottone) e chiamarci addActionListener(this);
Nel metodo da implementare ActionPerformed in MioFrame se 
ActionEvent.getSource == MioPanel.MioBottone è questt'ultimo ad essere 
stato cliccato, e puoi scrivere il codice per le azioni da intraprendere.
Oppure puoi usare anche la soluzione di Simone se non hai necessità di 
gestire molti eventi.
Ciao

 Ciao
Grazie a tutti per le risposte!!
In effetti non avevo pensato al costruttore in MioPanel e la soluzione che
mi proponi tu riguardo al listener mi è venuta in mente stamattina nel mio
ufficio (quello uguale all'ufficio che aveva Fonzie in Happy Days).
Comunque grazie a tutti per il tempo che mi avete dedicato!!!!