Paint (Graphics g) e coordinate

di il
15 risposte

Paint (Graphics g) e coordinate

Salve,

Qualcuno può spiegarmi come funziona il metodo paint( Graphics g).
A quanto ho capito esso viene richiamato automaticamente e quindi mi vedo costretto , anche perchè non sono capace a farlo diversamente , a creare delle variabili static ( ma non sono convinto).
Quello che vorrei fare è "semplicemente" disegnare dei quadretti senza cancellare il precedente alle coordinate x,y.
Purtroppo nelle varie versioni di codice , o non disegna , oppure cancella il precedente quadrattino, oppure non funziona come il seguente codice

dove dice che variabile non statiche non possono essere referenziate

Secondo voi come è possibile passare x e y a Paint(Graphics g) senza usare variabili static ?Oppure come vengono passate le coordinate per
creare oggetti grafici con coordinate diverse

Nella documentazione di Oracle , ho letto come disegnare ma sembra che gli esempi disegnino solo le figure solamente una volta senza
mai cambiare coordinate

La classe principale è JavaApplication21 il quale eredita da Jcomponent e ridisegna( ovveride) il metodo paint ereditato
update.setG1 è un semplice metodo della classe "prova" che dovrebbe in teoria aggiornare le coordinate.

grazie per qualasiasi suggerimento
main

package javaapplication21;

import java.awt.Graphics;
import java.util.Scanner;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class JavaApplication21 extends JComponent{
    
  public int x;
  public int y;
  
    @Override
    public void paint(Graphics g) {
    
        prova update  = new prova(g);
        update.setG1(x,y);
  }
  public static void main(String[] args) {
        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setBounds(30, 30, 300, 300);
        window.setVisible(true);
        window.getContentPane().add(new JavaApplication21());
        
        String cmd;                  // command from User
        
        Scanner user = new Scanner(System.in); // Input keyboard
        do {
        
            System.out.print(">:");
            cmd= user.next();
            
             if (cmd.contains("s")) {
                
                 x=0;y=100;    <---- variabile x e y non statica non può essere referenziata
                 
                }  
            if (cmd.contains("n")){
                
                x=0; y=200; <---- variabile x e y non statica non può essere referenziata
                }
          
        } while (!cmd.contains("Q"));
    }
    
}
classe prova

package javaapplication21;

import java.awt.Graphics;
/**
 *
 * @author 
 */
public class prova {

Graphics g1;
int x;
int y;

    public prova ( Graphics g)
    {
        this.g1 = g;
    }
    
    public void setG1(int x, int y){
        
        this.x =x;
        this.y =y;
        
        g1.fillRect(x, y, 10,10);
    }
    
}

15 Risposte

  • Re: Paint (Graphics g) e coordinate

    In questa versione , il quadrattino viene disegnato e poi cancellato dopo aver disegnato il secondo , probabilmente per repaint().
    Senza repaint() non disegna. Ho come il sospetto di aver fatto qualcosa di sbagliato con frame e Jpanel

    main class rev 1
    
    public class JavaApplication21 extends JComponent{
        
      static public int x;
      static public int y;
      
        @Override
        public void paintComponent(Graphics g) {
        
            
            prova update  = new prova(g);
            update.setG1(x,y);
      }
      public static void main(String[] args) {
            JFrame window = new JFrame();
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            window.setBounds(30, 30, 300, 300);
            window.setVisible(true);
            window.getContentPane().add(new JavaApplication21());
            
            String cmd;                  // command from User
            
            Scanner user = new Scanner(System.in); // Input keyboard
            do {
            
                System.out.print(">:");
                cmd= user.next();
                
                 if (cmd.contains("s")) {
                    
                    x=200;
                    y=100;
                    window.repaint();
                    }  
                if (cmd.contains("n")){
                    x=0;
                    y=0;
                    window.repaint();
                    }
              
            } while (!cmd.contains("Q"));
        }
        
    }
    
    
  • Re: Paint (Graphics g) e coordinate

    Cyrano ha scritto:


    Qualcuno può spiegarmi come funziona il metodo paint( Graphics g).
    Innanzitutto dipende di che cosa parliamo: AWT o Swing?
    Il paint(Graphics) è il metodo "originale" definito e noto per tutti i componenti AWT. In Swing il paint(Graphics) esiste ancora (Swing ha le "radici" in AWT, infatti tutti i componenti Swing hanno alla base java.awt.Component) ma in Swing il "contesto" di disegno del componente è paintComponent(Graphics) .
    Questo perché JComponent (base dei componenti Swing) all'interno di paint "fattorizza" il disegno del componente in 3 fasi distinte: paintComponent, paintBorder, paintChildren. Trovi la spiegazione qui:

    A Closer Look at the Paint Mechanism

    Cyrano ha scritto:


    A quanto ho capito esso viene richiamato automaticamente
    Sì, nelle interfacce grafiche moderne (è così per Swing, SWT, JavaFX, ma anche es. Android, ecc..) il disegno dei componenti è un "evento". Questo perché non è il codice di una singola applicazione ad avere il controllo completo dello schermo. Più applicazioni condividono il desktop ed è l'utente che copre/scopre, minimizza/ripristina le finestre come e quando vuole e questo appunto causa EVENTI.
    Quindi non è l'applicazione che stabilisce esattamente quando/dove disegnare ma è il sistema/framework che dice al componente "bene, ora disegnati!".

    Cyrano ha scritto:


    e quindi mi vedo costretto , anche perchè non sono capace a farlo diversamente , a creare delle variabili static ( ma non sono convinto).
    No, non va affatto bene. "static" ha senso solo per certi design particolari delle classi. Altrimenti, per il resto, è molto probabilmente dubbio e inappropriato.
    Tieni presente che i paint/paintComponent/ecc.. sono metodi di ISTANZA, quindi puoi e devi basarti sullo "stato" (variabili di istanza, NON static) dell'oggetto.
    Prova a guardare alcuni dei miei Java Examples ( https://github.com/andbin/java-examples ) sul custom painting.
  • Re: Paint (Graphics g) e coordinate

    Ciao ,

    Ho trovato il tuo codice ben più ordinato e comprensibile rispetto a molti altri esempi sparsi per internet
    Se ho capito bene, aggiungi ogni oggetto di tipo CircleElement ad una lista di tipo CircleElements
    per poi ridisegnare tutti gli oggetti contenuti nella lista appena dopo.

    I valori delle coordinate x e y sono definiti come attributi della classe CircleElement e vengono aggiornati
    dal metodo addRandomCircle, dove come detto prima crei ad ogni chiamata (button event) il nuovo oggetto di tipo CircleElement e chiami il metodo
    del JPanel (multiCirclesPaintPanel) ovvero addCircleElement che ha il compito di aggiornare la lista e ridisegnare
    tutti gli oggetti circle.

    Sulla base di questo sto aggiornando il tuo MultiCirclesPaintFrame per i miei scopi con una piccola differenza.
    Io non devo creare coordinate x,y random ma tenerne traccia e aggiungere ad esse un offset ogni qualvolta sia necessario , ovvero quando
    premo i tasti freccia.Devo poter creare un quadretto o circle uno vicino all'altro ma con direzione dipendente dal tasto della freccia ( destra ,sinistra,sopra ,sotto).
    Quindi ho dichiaro x, y ancora una volta "global" oppure pensavo di fare all'interno di addRandomCircle (execCommands() nel mio caso) il get dell'ultimo oggetto CircleElement ad esempio getX() e getY() e poi sommare ad esse un valore ancora da decidere , quindi
    chiamare il JPanel come hai fatto tu

    cosa ne pensi ?

    nota:
    Mi sono imbattuto nelle anonymous inner classes che non conoscevo. Ho cercato di riutilizzare lo stesso principio per creare l'event listener
    I metodi in ovveride vuoti sono stati creati automaticamente da netBeans.
    Ho capito che hai passato una classe come un argomento , ma non ho capito perchè, devo leggermi anche questo
    
    package wroom;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.BorderFactory;
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.WindowConstants;
    
    /**
     *
     * @author l'originale di Andrea Binello ("andbin")  si trova qui https://github.com/andbin/java-examples 
     *  modificato da cyrano per scopi didattici
     */
    public class RoomPaintFrame extends JFrame {
        
            private RoomPaintPanel RoomPaintPanel;
            private JPanel controlPanel;
            private JPanel commandPanel;
            
            private JButton northButton;
            private JButton southButton;
            
            private JTextField commands;
            private byte commandsWidthField = 20;
            
            public RoomPaintFrame() {
                super("Wroom - Java Exercise");
                
                RoomPaintPanel = new RoomPaintPanel();
                controlPanel = new JPanel();
                commandPanel = new JPanel();
                northButton = new JButton("Look At North");
                southButton = new JButton("Look At South"); 
                commands = new JTextField(commandsWidthField);
            
                RoomPaintPanel.setOpaque(true);
                RoomPaintPanel.setBackground(Color.WHITE);
    	
                
                controlPanel.setFocusable(true);
                controlPanel.requestFocus();
                
                RoomPaintPanel.addMouseListener(new MouseListener() {
                    
                    @Override
                    public void mousePressed(MouseEvent e) {
                        
                            RoomPaintPanel.setFocusable(true);
                            RoomPaintPanel.requestFocus();
                    }
    
                    @Override
                    public void mouseReleased(MouseEvent e) {}
    
                    @Override
                    public void mouseEntered(MouseEvent e) {}
    
                    @Override
                    public void mouseExited(MouseEvent e) {}
    
                    @Override
                    public void mouseClicked(MouseEvent e) {
                    }
                    
                });
                        
                
                commands.setText("commands> ");
                
                
                controlPanel.setLayout(new BoxLayout(controlPanel,BoxLayout.LINE_AXIS));
                controlPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
                controlPanel.add(Box.createHorizontalStrut(10));
                controlPanel.add(northButton);
                controlPanel.add(southButton);
                commandPanel.add(commands);
                
               // Setups the KeyListener for the JtextField using anonymous inner classes.
               
               RoomPaintPanel.addKeyListener(new KeyListener() {
                               
    	       @Override
                   public void keyPressed(KeyEvent keyEvent) {
                   
                       execCommands(keyEvent);
                   }
    
                   @Override
                   public void keyTyped(KeyEvent e) {
                        
                    }
                   @Override
                   public void keyReleased(KeyEvent e) {}
                        
                });
                add(RoomPaintPanel,BorderLayout.CENTER);
                add(controlPanel,BorderLayout.NORTH);
                add(commandPanel,BorderLayout.SOUTH);
                
    	    // Setups the frame.
                setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                setSize(400, 300);
                setLocationRelativeTo(null);   // Centers the frame on the screen.                    
    
                    
            }
        private void execCommands(KeyEvent e) {
    
    		// crea un nuovo oggetto
    		// legge gli attributi x e y dell'oggetto precedente
    		// somma un offeset verticale o orrizontale dipendente dal tipo di freccia premuto
     		// chiama il metodo di RoomPaintPanel per aggiornare la lista e ridisegnare tutto.
    }
    
    
  • Re: Paint (Graphics g) e coordinate

    Ciao ,

    Ho provato a scrivere il codice basato sull'idea precedente.
    In sintesi questo programma dovrebbe creare un quadrattino in direzione del tasto freccia che può essere destra, sinistra, sopra ,sotto.
    In questo caso per semplicità è sufficiente un qualsiasi tasto premuto.

    execCommands è il metodo in sostituzione di addRandomCircle e viene chiamato quando la pressione di un qualsiasi
    tasto genera un evento di tipo keyevent.
    Siccome non devo generare x e y con valori casuali , dopo aver impostato i primi valori di x e y sul primo oggetto di tipo RoomElement
    leggo il precedente oggetto con previousRoomElement che è dello stesso tipo ovvero RoomElement.
    Per leggere l'oggetto precedente , richiamo un nuovo metodo creato in RoomPaintPanel che restituisce la lista che solitamente si incarica di
    memorizzare tutti gli elementi finalizzati al disegno.
    A sua volta per leggere la lista, ho bisogno di un Indice e purtroppo anche qui ricasco sullo stesso problema perchè tale variabile indice
    ( indexRoomElement ) deve essere statica altrimenti leggerò sempre l'elemento zero , ovvero l'inizializzazione di questa variabile.

    Per ora non vedo altra soluzione. Il problema è sempre lo stesso , condividere il valore di una variabile fra più istanze che sia il valore di
    una coordinata o il valore di un indice , come nell'ultima modifica che di seguito riporto :
    
        private void execCommands(KeyEvent e) {
    
            roomElements = new ArrayList<RoomElement>();
            roomElements = RoomPaintPanel.getList();
            RoomElement previousRoomElement;
            
            int indexRoomElement = 0; //<<----
            
            int previousPosX=0;
            int previousPosY=0;
            
            try {
                previousRoomElement = roomElements.get(indexRoomElement);
                previousPosX = previousRoomElement.getPosX();
                previousPosY = previousRoomElement.getPosY();
            } catch ( IndexOutOfBoundsException e_)
            {
                System.out.println("Oggetto precedente non esistente,"
                                 + "Creo ora il primo oggetto roomElement..");
            }
            
            int width = 10;
            int height = 20;
               
    	// Y è fissa a 10 per simulare solo pressione tasto freccia a destra rimanendo sulla stessa riga
            int x = previousPosX + width; // va verso destra
            int y = 10;   
            
             // int y = previousPosY + height;
    
    	                
            System.out.println(e.getKeyCode());
            System.out.println("x:"+x+" "+"Y:"+y);
            
            RoomElement roomElement = new RoomElement(x,y,width,height);
            RoomPaintPanel.addRoomElement(roomElement);
        }
    
  • Re: Paint (Graphics g) e coordinate

    EDIT :
    ho aggiunto un nuovo metodo:

    int indexRoomElement = RoomPaintPanel.getListSize()-1;

    Ora effettivamente mi crea un quadrattino di coordinate x++ ogni volta che premo un pulsante.

    Un altro errore che facevo nelle versioni precedenti e che non ridisegnavo tutti gli oggetti..Cosa che tu fai utilizzando la lista + un ciclo for

    Funziona Grazie Andbin. La mia modifica sembra invece contorta !


    execCommands(KeyEvent e) rev1:
    
     private void execCommands(KeyEvent e) {
    
            roomElements = new ArrayList<RoomElement>();
            roomElements = RoomPaintPanel.getList();
            
            RoomElement previousRoomElement;
            
            int indexRoomElement = RoomPaintPanel.getListSize()-1;  // <<-----
            
            int previousPosX=0;
            int previousPosY=0;
            
            try {
                previousRoomElement = roomElements.get(indexRoomElement);
                previousPosX = previousRoomElement.getPosX();
                previousPosY = previousRoomElement.getPosY();
            } catch ( IndexOutOfBoundsException e_)
            {
                System.out.println("Oggetto precedente non esistente,"
                                 + "Creo ora il primo oggetto roomElement..");
            }
            
            int width = 10;
            int height = 20;
               
    	// Y è fissa a 10 per simulare solo pressione tasto freccia a destra
            int x = previousPosX + width;
             // int y = previousPosY + height;
            int y = 10;   
    	                
            System.out.println(e.getKeyCode());
            System.out.println("x:"+x+" "+"Y:"+y);
            
            RoomElement roomElement = new RoomElement(x,y,width,height);
            RoomPaintPanel.addRoomElement(roomElement);
        } 
    
    
    RoomPaintPanel ( prima era MultiCirclesPaintPanel)
    
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package wroom;
    
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JPanel;
    
    /**
     *
     * @author 
     */
    public class RoomPaintPanel extends JPanel {
        
        private List<RoomElement> roomElements; 
        
        public RoomPaintPanel() {
         roomElements = new ArrayList<RoomElement>();
        }
    
        public List<RoomElement> getList()
        {
            return roomElements;
        }       
    
        public int getListSize()
        {
            return roomElements.size();
        }       
    
        
        public void addRoomElement (RoomElement roomElement) {
            roomElements.add(roomElement);
            
         repaint(roomElement.getPosX(),roomElement.getPosY(),roomElement.getWidth(),roomElement.getHeight());
            
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            
           super.paintComponent(g);
            
           Graphics2D g2d = (Graphics2D) g;
           
           g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
           for (RoomElement roomElement : roomElements) {
               
    
               int x = roomElement.getPosX();
               int y = roomElement.getPosY();
               int width = roomElement.getWidth();
               int height = roomElement.getHeight();
               
               g.fillRect(x,y, width, height);
           }
        }
    }
    
  • Re: Paint (Graphics g) e coordinate

    Cyrano ha scritto:


    Ho trovato il tuo codice ben più ordinato e comprensibile rispetto a molti altri esempi sparsi per internet
    Grazie!

    Non ho purtroppo tempo ora di leggere il tuo codice. Ho avuto stasera giusto solo un pochino di tempo per migliorare il mio esempio Multi Circles Paint. Manco a farlo apposta l'avevo creato esattamente il 29 Maggio di un anno fa!
  • Re: Paint (Graphics g) e coordinate

    Figurati non c'è alcun problema ! Grazie ancora
  • Re: Paint (Graphics g) e coordinate

    Buongiorno ,

    Ho questo messaggio di errore : non-static method addRoomElement(explorer.RoomElement) cannot be referenced from a static context

    Per il messaggio di errore in oggetto, avrei già googlato e sapevo che una classe statica non può essere instanziata ed infatti è quello che trovo nelle risposte di altri utenti.
    Non ho capito chi è il "static context", mentre la classe RoomElement viene instanziata come penso anche le altre classi.
    Provo a postare il codice basato su quello di Anbin che è perfettamente funzionante. Io lo sto studiando a pezzetti provando a replicare quello che ho capito, ma purtroppo ho incontrato questo errore:
    non-static method addRoomElement(explorer.RoomElement) cannot be referenced from a static context 
    L'errore lo evidenzia nella classe World
            MapPaintPanel.addRoomElement(roomElement);  // <<<------------ Error non-static...
    classe World
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JFrame;
    import javax.swing.WindowConstants;
    
    
    public class World extends JFrame{
            /* Map Panel Attributes */
        
            private MapPaintPanel  mapPaintPanel;
            private Color color;
            
            
            static final int screenW = 800;
            static final int screenH = 700;
            
        public World() {
            super("Explorer - Game");
            System.out.println("World Constructor");
            mapPaintPanel = new MapPaintPanel(color);
            
            mapPaintPanel.setBackground(Color.WHITE);
            mapPaintPanel.setOpaque(true);
            mapPaintPanel.setFocusable(true);
            mapPaintPanel.requestFocus();
            
            mapPaintPanel.addMouseListener(new MouseListener() {
                    
                    @Override
                    public void mousePressed(MouseEvent e) {
                            
                        Build();
                    }
                    @Override
                    public void mouseReleased(MouseEvent e){}
                    @Override
                    public void mouseEntered(MouseEvent e) {}
                    @Override
                    public void mouseExited(MouseEvent e)  {}
                    @Override
                    public void mouseClicked(MouseEvent e) {
                    }
                });
                
            add(mapPaintPanel,BorderLayout.CENTER);
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(screenW, screenH);
            setLocationRelativeTo(null);   // Centers the frame on the screen.                    
        
        }
    
        private void Build(){
            
            RoomElement roomElement;
            
            roomElement = new RoomElement(50,50,150,150);
            
            MapPaintPanel.addRoomElement(roomElement);  // <<<------------ Error non-static...
        }
    }
    


    main
    
    public class Explorer {
    
        public static void main(String[] args) {
            
    		SwingUtilities.invokeLater(
                            new Runnable() {
                                public void run() {
    				new World().setVisible(true);
                                }
                            }
                    );
        }
    }
    

    Classe MapPaintPanel
    
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.Toolkit;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JPanel;
    
    public class MapPaintPanel extends JPanel{
    
        private List<RoomElement> roomElements; 
        private Color color;
        private boolean filled = true;
        private RoomElement initList;
        
         public MapPaintPanel(Color value) {
    
            this.color = value;
            roomElements = new ArrayList<RoomElement>();
            initList = new RoomElement(0,0,50,50);
            addRoomElement(initList);
            System.out.println("MapPaintPanel Constructor");
        }
         
        public List<RoomElement> getList()
        {
            return roomElements;
        }       
    
        public void Init(){
        }
    
        public int getListSize()
        {
            return roomElements.size();
        }       
        public boolean getFilled(){
            return filled;
        }
        public Color getColor(){
            return this.color;
        }
        public void setColor( Color value){
            this.color = value;
        }
        public void setFilled( boolean value){
            this.filled = value;
        }
        public void addRoomElement (RoomElement roomElement) {
            //roomElements.add(roomElement);
            //repaint(roomElement.getPosX(),roomElement.getPosY(),roomElement.getWidth(),roomElement.getHeight());
        }
    }
    
  • Re: Paint (Graphics g) e coordinate

    Cyrano ha scritto:


    Ho questo messaggio di errore : non-static method addRoomElement(explorer.RoomElement) cannot be referenced from a static context
    Stai cercando di invocare addRoomElement come se fosse un metodo "statico", invocandolo su un nome di classe MapPaintPanel.
    Ma addRoomElement è un metodo di istanza, quindi lo devi invocare su un reference ad un oggetto MapPaintPanel. Quindi devi prima creare una istanza di MapPaintPanel, poi potrai invocare il metodo.
  • Re: Paint (Graphics g) e coordinate

    L'avevo già instanziato nel costruttore, è un errore di distrazione oppure di come assegno i nomi
    da così:

    MapPaintPanel.addRoomElement(roomElement);

    deve diventare così

    mapPaintPanel.addRoomElement(roomElement);

    con la m minuscola
    Grazie
  • Re: Paint (Graphics g) e coordinate

    Buonasera,


    Il programma ora disegna con il mouse e ha la possibilità di scegliere 4 colori con un click e di attivare la funziona di gomma con un key per cancellare tutto o un quadrattino per volta;disegna o cancella con l'evento MouseDragged o MousePressed.
    Ora mi chiedo se non fosse meglio "spostare" lo sviluppo del codice lontano dalla classe che eredita JFrame o continuare a sviluppare tutta la logica li dentro.
    La classe che eridata JFrame si chiama WorldFrame
    In WorldFrame esiste un metodo per determinare la collisione tra quadretti e per richiedere di rimuovere o aggiungere un quadretto nella lista
    del Jpanel.Il metodo serve per continuare a disegnare "strisciando" senza aggiungere elementi doppi nella lista che poi viene letta per disegnare sotto paintComponents

    Nella classe che eredita JPanel non faccio altro che utilizzare l'override di paintComponent per disegnare o aggiornare il colore del quadrattino oltre che aggiornare la lista quando cancello/disegno.

    https://ibb.co/iZGMN
    Più avanti dovrò salvare e caricare il disegno , ma non so se sviluppare tutto quanto sotto WordFrame oppure creare delle classi a parte dove gestire anche le coordinate e le collisioni

    grazie per qualasiasi consiglio
  • Re: Paint (Graphics g) e coordinate

    Qui il codice del JFrame. Quello che non so se può andare bene cosi come è organizzato oppure deve essere strutturato diversamente.
    Altri metodi che andrò ad a aggiungere sono Load(),Save()
    Mi chiedo se devo sviluppare il programma tutto li dentro al JFrame oppure si tende a "dividere" per riutilizzare alcuni metodi in caso di "ampliamento" del codice
    sono piuttosto confuso su questo punto



    Grazie mille
  • Re: Paint (Graphics g) e coordinate

    Salve,
    Credo di aver risolto qualche dubbio consultando : Rendering e Java Book
    Vengono definiti due tipi di loop che identificano rispettivamente il passive rendering ed l'active rendering.
    Il primo è indicato per le applicazioni dove l'O.S. informa AWT del nuovo evento Paint , mentre nel secondo è l'utente che decide quando disegnare.
    Nel Frame gestisci gli eventi relativi alla sola finestra (Frame) , mentre nel JPanel implementi la logica che ti server ad esempio un keylistener.



    spero di aver capito bene, comunque provo
  • Re: Paint (Graphics g) e coordinate

    Cyrano ha scritto:


    Vengono definiti due tipi di loop che identificano rispettivamente il passive rendering ed l'active rendering.
    Su Rendering il discorso del "active" rendering riguarda principalmente il full-screen exclusive mode
Devi accedere o registrarti per scrivere nel forum
15 risposte