Newsgroup: it.comp.java
Titolo: Java Graphics

Salve a tutti,
sto lavorando su un pezzo di codice che genera un bottone su un pannello e
una canvas in un altro.
Controllando l'evento di pressione del bottone il programmino dovrebbe
disegnare sulla canvas un rettangolo delle dimensioni specificate.
Perche' non riesco a visualizzarlo ?
Qualcuno saprebbe spiegarmi?
Grazie.
Riporto il sorgente:
------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
class prova2 extends Frame implements ActionListener {
        Button aggiungi;
        MyCanvas myc;
    public prova2(){
        setBounds(50,50,600,400);
        Panel pn=new Panel();
        Panel ps=new Panel();
        pn.setBackground(Color.lightGray);
        add(pn, BorderLayout.NORTH);
        add(ps, BorderLayout.SOUTH);
        pn.add(aggiungi=new Button("Aggiungi"));
         ps.add(myc=new MyCanvas());
          addWindowListener(new Closer());
        aggiungi.addActionListener(this);
        setVisible(true);
        myc.getGraphics().drawRect(10,10,100,100);
    }
    public static void main (String args[]){
        prova2 prova=new prova2();
    }
    public void actionPerformed(ActionEvent e){
        if (e.getSource()==aggiungi){
            myc.getGraphics().drawRect(10,10,100,100);
            //repaint();
            //System.out.println(myc);
            //myc.stampa();
        }
    }
//----------------------------------------------
    class MyCanvas extends Canvas{
    /*public MyCanvas()
          {
        Toolkit t=Toolkit.getDefaultToolkit();
      } */
        /*public void stampa(){
            //Graphics g=getGraphics();
            //g.drawRect(1,1,20,20);
            myc.getGraphics().drawRect(10,10,100,100);
        } */
       public void paint(Graphics g){
            g.drawRect(10,10,100,100);
      }
    }
}
-----------------------------------------------------

Ma levami una curiosità.
Ma hai provato a compilarlo ????
Da errore, in piu' punti !!
Non parte neanche.
E poi credimi, quello che cerchi lo trovi su qualsiasi libro che tratta java

 ha scritto nel messaggio
news:7O%k8.31559$%g7.9...@twister2.libero.it...


Scusami se sono stato un po brusco nella risposta.
Allora ..... qualsiasi libro va bene
Tipo quello dell' Apogeo.
E comunque un libro cale l'altro, basta che sia un po spesso e trovi tutto.
E poi, nel sorgente, non metti le coordinate del bottone
ma dove lo visualizzi ?

Il bottone compare. Svista mia. Scusa,
Comunque hai sbagliato delle cose nel sorgente
Nel modificarlo per capire dove era l'inghippo ho fatto io degli errori
eccoti il sorgente che va
import java.awt.*;
import java.awt.event.*;
class Prova2 extends Frame implements ActionListener {
        Button aggiungi;
        MyCanvas myc=new MyCanvas();
 public static void main (String args[]){
        Prova2 prova=new Prova2();
    }
     Prova2()
     {
        setBounds(50,50,600,400);
        Panel pn=new Panel();
        Panel ps=new Panel();
        pn.setBackground(Color.lightGray);
        add(pn, BorderLayout.NORTH);
        add(ps, BorderLayout.SOUTH);
        pn.add(aggiungi=new Button("Aggiungi"));
        // ps.add(myc=new MyCanvas());
 add(myc);
        //  addWindowListener(new Closer());
        aggiungi.addActionListener(this);
        setVisible(true);
      //  myc.getGraphics().drawRect(10,10,100,100);
    }
    public void actionPerformed(ActionEvent e){
        if (e.getSource()==aggiungi){ repaint();
          //  myc.getGraphics().drawRect(10,10,100,100);
            repaint();
            //System.out.println(myc);
            //myc.stampa();
        }
    }
//----------------------------------------------
    class MyCanvas extends Canvas{
    /*public MyCanvas()
          {
        Toolkit t=Toolkit.getDefaultToolkit();
      } */
        /*public void stampa(){
            //Graphics g=getGraphics();
            //g.drawRect(1,1,20,20);
            myc.getGraphics().drawRect(10,10,100,100);
        } */
       public void paint(Graphics g){
//g.setColor(Color.black);
           g.drawRect(10,10,100,100);
      }
    }
}

 
ciao, l'errore piu grande che salta all'occhio in questo codice e' la 
chiamata di setVisibileprima di disegnare sul contesto grafico...
in teoria tutte le operazioni sui componennti dell'interfaccia grafica 
devono essere effettuate prima di renderli visibili...
successivamente per modificare i componenti devi passare attraverso il 
thread dell event dipatcher...
quindi nel caso piu semplice attraverso le classi che gestiscono gli 
eventi...
inoltre ti consiglio di chiamere il repaint dopo che hai effettuato un 
disegno sul contesto grafico
   bye bye
 
    bEPpE

 Tipo quello dell' Apogeo.
Ieri ho fatto una capatina in libreria e sinceramente ho riscontrato
parecchia superficialita' nella trattazione degli argomenti.
D'altronde non si puo' pretendere che un libro che tratti di tutto lo possa
fare in maniera approfondita.
C'e' cmq un vecchio libro della O'relly che tratta l'argomento nel
complesso.
Cmq grazie, sono riuscito a capire che cio' che realmente crea problemi e'
l'aver aggiunto la canvas ad un pannello e in ogni caso penso sia un
problema di Layout .
Stranezze di java.
Ciao.

     bEPpE
Ciao.
 Alex

 disegno sul contesto grafico
Infatti ho notato anche altrove questo utilizzo.


 Ma il repaint non viene invocato comunque dalla VM ?
la vm la richiama soltanto alla prima attivazione dell'applet(applicazione)
oppure quando ci passa sopra una finestra oppure quando passa da icona a 
finestra grande e cosi via in tuttel le altre situazioni ad esempio se devi 
disegnare qualcosa su un pannello allore devi forzare la chiamata del paint 
con il metodo repaint...
