Newsgroup: it.comp.java
Titolo: Disegnare nello stesso frame da due classi diverse

Salve,
ho una classe che estende i frame dove disegno un triangolo, ora vorrei 
creare un'altra classe che mi disegni un altro trinagolo nel frame 
precedente.
Cioè:
// classe che disegna su di un frame
// riceve le coordinate di un triangolo 
class Disegna extends Frame
{
        int coordX, coordY;
        public void prova(int c1, int c2)
        { 
                coordX = c1;
                coordY = c2;
        }
        public void paint(Graphics g)
        {
                System.out.println("Siamo qui");
                int x[]={coordX, coordX-15, coordX-15}; 
                int y[]={coordY, coordY+15, coordY-15};
                Polygon pol=new Polygon(x,y,x.length);
                g.drawPolygon(pol);
        }
}
// qui sotto voglio creare una classe che mi disegna il triangolo
// in un altra posizione...
Ho fatto vari tentativi, ma non sono riuscito.
Qualcuno mi può dare una mano??
Anticipatamente ringrazio.
galliva

Potresti creare la nuova classe facendo si che le venga passata una
reference al frame di prima:
public class Nuova {
    public Nuova(Frame vecchia_classe) {
          disegnaTriangolo(vecchia_classe);
    }//end costruttore
    public void disegnaTriangolo(Frame old) {
        Graphics g=old.getGraphics();
        g.drawLine(....); //ovvero il tuo codice per disegnare il triangolo
    }//end disegnaTriangolo
}//end class Nuova
public class Vecchia extends Frame {
    public Vecchia() {
            Nuova app=new Nuova(this);
    }
}
Praticamente la nuova classe può interagire con la vecchia grazie alla
reference passata (ovvero la vecchia classe crea un'istanza di quella nuova
passandole un riferimento a se stessa con la keyword this). La nuova classe
ricava l'oggetto Graphics della vecchia con old.getGraphics(). E a questo
punto ci può disegnare sopra. Come vedi non è necessario che la nuova classe
estenda Frame o che altro.
Ciao!!

 ...


 È possibile?
Intendi chiedere se due classi che non si conoscono per niente, cioè due
classi tra le quali non è stata passata alcuna reference, che non ereditano
una dall'altra e che non sono innestate l'una dentro l'altra, possono
interagire tra di loro? Ma...non credo!!! Forse però esiste una possibilità:
forse una classe può richiamare la classe padre che l'ha istanziata (ma
onestamente non saprei dove guardare...forse proprio i metodi della classe
Class nelle API) e a quel punto potresti farlo (ricavando però sempre
l'oggetto Graphics della classe padre). Tieni presente però che dovrebbe
essere poco probabile e che comunque creare una reference non ti costa
proprio nulla. Se trovi una soluzione la metti come post? La cosa potrebbe
essere interessante! Ciao!

forse una classe può richiamare la classe padre che l'ha istanziata 
Se ti basta trovare la classe dell'oggetto padre (per richiamarne, ad
esempio, un metodo statico) puoi fare:
public class ParentAwareClass
{
	Class parent;
	public ParentAwareClass()
	{
		Throwable t=new Throwable();
		StackTraceElement[] ste=t.getStackTrace();
		String parentClassName=ste[1].getClassName();
		parent=Class.forName(parentClassName);
	}
}
Così non hai però modo di sapere quale istanza della classe padre ha
istanziato la classe figlia; ma, in fondo, quanto costa aumentare la
dipendenza tra le due classi passando alla figlia un reference al
padre?
public class ParentNotifiedClass
{
	Object parent
	public ParentNotifiedClass(Object parent)
	{
		this.parent=parent;
	}
}
-- 
Art. 11: L'italia ripudia la guerra come strumento di offesa
alla libertà degli altri popoli e come mezzo di risoluzione 
delle controversie internazionali.