Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Problema nella creazione di un vettore di Oggetti

    Salve a tutti, premetto che non ho al momento ampie conoscenze con questo linguaggio di programmazione, in quanto lo sto studiando da circa un anno a scuola (frequento il quinto anno di Informatica), e un po' a casa da autodidatta.


    Il programma che ho realizzato è basato semplicemente su 3 classi:


    -creaOggetti (Main e creazione Oggetti)
    -Processo (classe che richiamo all'esecuzione del Thread per avviare il programma )
    -Oggetto (classe nella quale disegno l'oggetto, in questo caso ovali e ne definisco le caratteristiche)


    In sostanza lo scopo del programma è creare degli ovali sullo schermo, e farli muovere.
    Creando manualmente uno, due, tre o piu' oggetti, il programma funziona benissimo, mi crea gli oggetti e li disegna sullo schermo e si muovono, ma nel momento in cui rendo "Dinamica" la cosa, creando un vettore di oggetti, essi non compiono piu' sullo schermo, penso sia dovuto al fatto che non riesce a disegnarli ma non so per quale ragione.


    Ecco il codice:


    Classe Processo (non penso proprio sia qui il problema):


    codice:
    package oggetto;
    
    
    public class Processo implements Runnable {
    	
    	creaOggetti Elemento = new creaOggetti();
    
    
    	
    	@Override
    	public void run() {
    		Elemento.crea();
    		while(true){
    			try {
                    Elemento.movimento();
    				Elemento.repaint();
    				Thread.sleep(15);
    				
    			} catch (InterruptedException e) {
    				
    				e.printStackTrace();
    				
    			}
    		}
    		
    	}
    
    
    }

    Classe Oggetto:


    codice:
    package oggetto;
    
    
    import java.awt.Color;
    import java.awt.Graphics2D;
    
    
    public class Oggetto {
    	
    	int WIDTH, HEIGHT, x = 0, y = 0;
    	final int asseX; //Asse X di partenza
    	final int asseY; //Asse Y di partenza
    	
    	//Costruttori
    	Color colore=Color.ORANGE;
    	public Oggetto ovale;
    
    
    	public Oggetto(Oggetto cerchio, int x, int y, int WIDTH, int HEIGHT) {
    		this.ovale=(cerchio);
    		this.x = x;
    		this.y = y;
    		this.WIDTH = WIDTH;
    		this.HEIGHT = HEIGHT;
    		asseX=x;
    		asseY=y;
    	}
    
    
    	void sposta(int larghezzaFinestra, int altezzaFinestra) {
    		
    		System.out.print("\nX = "+x+" Y = "+y);
    		
    		if ( x >= asseX && x < (larghezzaFinestra-(this.WIDTH+asseX)) ) x++; //Larghezza finestra - Coordinata di partenza X = DIAMETRO
    		else x = asseX; //X di partenza
    		
    		if(x>=this.WIDTH && x<=larghezzaFinestra/2) y++;
    		else if (y>=((altezzaFinestra/2))) y=asseY;
    
    
    		
    	}
    
    
    	public void paint(Graphics2D g) {
    		g.setColor(this.colore);
    		g.fillOval(x, y, WIDTH, HEIGHT);
    	}
    }

    Classe creaOggetti (penso sia nel print l'errore):


    codice:
    package oggetto;
    
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.awt.geom.Rectangle2D;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Random;
    
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    @SuppressWarnings("serial")
    
    
    public class creaOggetti extends JPanel {
      
       public static int h;
       public static int w;
       final int MAX_OGGETTI=2;
    
    
      
       /*
    	Oggetto cerchio0=new Oggetto(this.cerchio0,20,50,100,100, Color.RED);
    	Oggetto cerchio1=new Oggetto(this.cerchio1,20,200,100,100,Color.ORANGE);
    	Oggetto cerchio2=new Oggetto(this.cerchio1,20,350,100,100,Color.GREEN);
        */
       
    	
        Oggetto[] cerchio = new Oggetto[MAX_OGGETTI];
    	InputStreamReader input = new InputStreamReader(System.in); // Flusso di byte
    	BufferedReader tastiera = new BufferedReader(input); // Flusso di caratteri
        
    	public void crea(){
    		
    		 int X=0,Y=0,W=0, H=0;
    
    
    		for(int i=0; i<MAX_OGGETTI; i++){
    			
    			try {
    				
    				System.out.print("Inserisci l'asse X di partenza dell'oggetto -> ");
    				X = Integer.parseInt(tastiera.readLine());
    				
    				System.out.print("Inserisci l'asse Y di partenza dell'oggetto -> ");
    				Y=Integer.parseInt(tastiera.readLine());
    				
    				System.out.print("Inserisci la larghezza dell'oggetto -> ");
    				W=Integer.parseInt(tastiera.readLine());
    				
    				System.out.print("Inserisci l'altezza dell'oggetto -> ");
    				H=Integer.parseInt(tastiera.readLine());
    				
    				cerchio[i]=new Oggetto(cerchio[i],X,Y,W,H);
    				
    			} catch (NumberFormatException | IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    
    
    			
    			
    		}
    	}
    	
    	public void movimento() {
    		for(int i=0;i<MAX_OGGETTI; i++) cerchio[i].sposta(h,w);
    	}
    
    
    	public void paint(Graphics2D[] g) {
    		
    		g=new Graphics2D[MAX_OGGETTI];
    		Graphics2D[] g2d = new Graphics2D[MAX_OGGETTI];
    		
    	for(int i=0;i<MAX_OGGETTI; i++){
    		
    		super.paint(g[i]);
    		g2d[i]=(Graphics2D) g[i];
    		cerchio[i].paint(g2d[i]);
    	}
    	
    }
    	
    	
    	public static void main(String[] args) throws InterruptedException  {
    		
    	
    		
    		JFrame frame= new JFrame("Processo");
    		frame.setSize(800, 600);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		Rectangle r = frame.getBounds();
    		h = r.height;
    		w = r.width;
    		
    		Processo proc0=new Processo();
    		Thread p1=new Thread(proc0);
    		
    		frame.add(proc0.Elemento); //Aggiungo gli oggetti JPanel al FRAME
    		frame.setVisible(true);
    		
    		p1.start(); //Avvio il Thread
    	}
    }

    Spero di poter risolvere al piu' presto, intanto vi ringrazio in anticipo!


    Non compaiono gli oggetti sullo schermo !

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,216
    Per poter far sì che gli oggetti vengano disegnati devi ridefinire uno tra i due metodi: paint o paintComponent. Meglio il secondo.
    Ad ogni modo, i due metodi hanno la seguente firma:

    paint(Graphics g)
    paintComponent(Graphics g)


    Non puoi "inventarti" una nuova firma... se lo fai, stai definendo un nuovo metodo "custom" di cui nessuno sa nulla e che nessuno invocherà (se non lo fai tu, che ne ha conoscenza).

    Nel thread fai 2 chiamate: movimento() e repaint(). Il primo sposta gli oggetti. Il secondo richiama il "refresh" della videata. Il framework Swing effettua questo "refresh", richiamando il metodo paintComponent() (che a sua volta richiama il metodo paint() ). Ma, ovviamente, richiama quello giusto (cioè quello con la firma imposta dalla sua API).

    Nel tuo codice hai definito un metodo paint() che riceve un array di oggetti Graphics2D (che non ha alcun senso: il graphics è uno soltanto, quello del pannello in cui andranno disegnati gli oggetti)... e questo metodo non viene invocato da nessuno.

    Quindi, quello che va fatto, è ridefinire correttamente il metodo paint() o paintComponent(), che hanno la firma che ho esposto sopra.


    Ciao.
    Ultima modifica di LeleFT; 12-11-2015 a 12:00
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Per poter far sì che gli oggetti vengano disegnati devi ridefinire uno tra i due metodi: paint o paintComponent. Meglio il secondo.
    Ad ogni modo, i due metodi hanno la seguente firma:

    paint(Graphics g)
    paintComponent(Graphics g)


    Non puoi "inventarti" una nuova firma... se lo fai, stai definendo un nuovo metodo "custom" di cui nessuno sa nulla e che nessuno invocherà (se non lo fai tu, che ne ha conoscenza).

    Nel thread fai 2 chiamate: movimento() e repaint(). Il primo sposta gli oggetti. Il secondo richiama il "refresh" della videata. Il framework Swing effettua questo "refresh", richiamando il metodo paintComponent() (che a sua volta richiama il metodo paint() ). Ma, ovviamente, richiama quello giusto (cioè quello con la firma imposta dalla sua API).

    Nel tuo codice hai definito un metodo paint() che riceve un array di oggetti Graphics2D (che non ha alcun senso: il graphics è uno soltanto, quello del pannello in cui andranno disegnati gli oggetti)... e questo metodo non viene invocato da nessuno.

    Quindi, quello che va fatto, è ridefinire correttamente il metodo paint() o paintComponent(), che hanno la firma che ho esposto sopra.


    Ciao.
    Ti giuro sto diventando matto! Anzitutto ti ringrazio perché sono diversi giorni che cerco di trovare una soluzione al problema. Ho ridefinito come mi hai detto il metodo paint:

    In creaOggetti:
    //Ho usato come da te suggerito la firma paintComponent
    @Override
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d=(Graphics2D) g;
    for(int i=0;i<MAX_OGGETTI; i++) cerchio[i].disegna(g2d);

    }


    Classe oggetto:
    //Metodo che richiamo in creaOggetti con il paintComponent:
    public void disegna(Graphics2D g2) {
    g2.setColor(this.colore);
    g2.fillOval(x, y, WIDTH, HEIGHT);
    }


    Ma nulla non va! In console mi restituisce il seguente errore:
    codice:
    Inserisci l'asse X di partenza dell'oggetto -> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at oggetto.creaOggetti.paintComponent(creaOggetti.java:65)
    	at javax.swing.JComponent.paint(Unknown Source)
    	at javax.swing.JComponent.paintChildren(Unknown Source)
    	at javax.swing.JComponent.paint(Unknown Source)
    	at javax.swing.JComponent.paintChildren(Unknown Source)
    	at javax.swing.JComponent.paint(Unknown Source)
    	at javax.swing.JLayeredPane.paint(Unknown Source)
    	at javax.swing.JComponent.paintChildren(Unknown Source)
    	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
    	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
    	at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
    	at javax.swing.RepaintManager.paint(Unknown Source)
    	at javax.swing.JComponent.paint(Unknown Source)
    	at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
    etcetc
    In particolare in questa riga:
    codice:
     for(int i=0;i<MAX_OGGETTI; i++) cerchio[i].disegna(g2d);
    Spero di poter risolvere...
    Ultima modifica di StefanoLisi; 12-11-2015 a 15:05

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,216
    Quell'errore accade perchè succede questo (guarda il tuo metodo main):

    1) Viene creato il pannello
    2) Il pannello viene aggiunto al JFrame
    3) Il JFrame viene reso visibile
    4) Parte il thread


    Ora, il metodo crea() (che è il posto in cui vengono istanziati gli elementi dell'array) viene richiamato dal thread (che viene avviato al punto 4)

    Il punto 3, però, richiede al pannello di disegnarsi... questo fa richiamare il paintComponent()... e questo cerca di disegnare gli oggetti dell'array "cerchio"... e l'array cerchio non contiene ancora nulla (il metodo crea() verrà chiamato solo dopo).

    Devi rivedere questo passaggio: il metodo paintComponent() dovrebbe PRIMA assicurarsi che l'array sia stato riempito e solo se questa condizione viene verificata, passare al disegno dei suoi componenti.

    Per far questo, sposta l'istanziazione dell'array dentro al metodo crea() e fai un banale controllo nel metodo paintComponent():


    codice:
    public class creaOggetti ... {
       // Questa riga va modificata
       // Oggetto[] cerchio = new Oggetto[MAX_OGGETTI];
    
       // ... in questo modo
       Oggetto[] cerchio = null;
    
       ...
    
       public void crea() {
          // Creo QUI l'array
          cerchio = new Oggetto[MAX_OGGETTI];
          ...   // tutto il resto come prima
       }
    
       ...
    
       @Override
       public void paintComponent(Graphics g) {
          super.paintComponent( g );
          if (cerchio != null) {
             ...   // Tutto il resto come prima...
          }
       }
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Quell'errore accade perchè succede questo (guarda il tuo metodo main):

    1) Viene creato il pannello
    2) Il pannello viene aggiunto al JFrame
    3) Il JFrame viene reso visibile
    4) Parte il thread


    Ora, il metodo crea() (che è il posto in cui vengono istanziati gli elementi dell'array) viene richiamato dal thread (che viene avviato al punto 4)

    Il punto 3, però, richiede al pannello di disegnarsi... questo fa richiamare il paintComponent()... e questo cerca di disegnare gli oggetti dell'array "cerchio"... e l'array cerchio non contiene ancora nulla (il metodo crea() verrà chiamato solo dopo).

    Devi rivedere questo passaggio: il metodo paintComponent() dovrebbe PRIMA assicurarsi che l'array sia stato riempito e solo se questa condizione viene verificata, passare al disegno dei suoi componenti.

    Per far questo, sposta l'istanziazione dell'array dentro al metodo crea() e fai un banale controllo nel metodo paintComponent():


    codice:
    public class creaOggetti ... {
       // Questa riga va modificata
       // Oggetto[] cerchio = new Oggetto[MAX_OGGETTI];
    
       // ... in questo modo
       Oggetto[] cerchio = null;
    
       ...
    
       public void crea() {
          // Creo QUI l'array
          cerchio = new Oggetto[MAX_OGGETTI];
          ...   // tutto il resto come prima
       }
    
       ...
    
       @Override
       public void paintComponent(Graphics g) {
          super.paintComponent( g );
          if (cerchio != null) {
             ...   // Tutto il resto come prima...
          }
       }
    }

    Ciao.
    Anzitutto grazie! Ho provato a fare come mi hai suggerito però continua a darmi errore:

    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at oggetto.creaOggetti.paintComponent(creaOggetti.java:67)
        at javax.swing.JComponent.paint(Unknown Source)
        at javax.swing.JComponent.paintChildren(Unknown Source)
        at javax.swing.JComponent.paint(Unknown Source)
        at javax.swing.JComponent.paintChildren(Unknown Source)
        at javax.swing.JComponent.paint(Unknown Source)
        at javax.swing.JLayeredPane.paint(Unknown Source)
        at javax.swing.JComponent.paintChildren(Unknown Source)
        at javax.swing.JComponent.paintToOffscreen(Unknown Source)
        at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
        at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
        at javax.swing.RepaintManager.paint(Unknown Source)
        at javax.swing.JComponent.paint(Unknown Source)
        at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
        at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
        at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
        at java.awt.Container.paint(Unknown Source)
        at java.awt.Window.paint(Unknown Source)
        at javax.swing.RepaintManager$4.run(Unknown Source)
        at javax.swing.RepaintManager$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.access$1200(Unknown Source)
        at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
    Ecco la classe creaOggetti come l'ho modificata:

    codice:
    package oggetto;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    @SuppressWarnings("serial")
    
    
    public class creaOggetti extends JPanel {
      
       public static int h;
       public static int w;
       int X=0,Y=0,W=0, H=0;
       final int MAX_OGGETTI=1;
    
    
        Oggetto[] cerchio=null;
        InputStreamReader input = new InputStreamReader(System.in); // Flusso di byte
        BufferedReader tastiera = new BufferedReader(input); // Flusso di caratteri
        
        public void crea(){
            
            // int X=0,Y=0,W=0, H=0;
            cerchio = new Oggetto[MAX_OGGETTI];
            
            for(int i=0; i<MAX_OGGETTI; i++){
                
                try {
                    
                    System.out.print("Inserisci l'asse X di partenza dell'oggetto -> ");
                    X = Integer.parseInt(tastiera.readLine());
                    
                    System.out.print("Inserisci l'asse Y di partenza dell'oggetto -> ");
                    Y=Integer.parseInt(tastiera.readLine());
                    
                    System.out.print("Inserisci la larghezza dell'oggetto -> ");
                    W=Integer.parseInt(tastiera.readLine());
                    
                    System.out.print("Inserisci l'altezza dell'oggetto -> ");
                    H=Integer.parseInt(tastiera.readLine());
                    
                    cerchio[i]=new Oggetto(cerchio[i],X,Y,W,H);
                    
                } catch (NumberFormatException | IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
    
                
                
            }
        }
        
        public void movimento() {
            for(int i=0;i<MAX_OGGETTI; i++) cerchio[i].sposta(h,w);
        }
    
    
        @Override
        public void paintComponent(Graphics g) { //Ho usato come da te suggertio la firma paintComponent
             super.paintComponent(g);
             if(cerchio!=null){
                 Graphics2D g2d=(Graphics2D) g;
                 for(int i=0;i<MAX_OGGETTI; i++) cerchio[i].disegna(g2d);                
             }
             
    }
        
        
        public static void main(String[] args) throws InterruptedException  {
            
        
            
            JFrame frame= new JFrame("Processo");
            frame.setSize(800, 600);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            Rectangle r = frame.getBounds();
            h = r.height;
            w = r.width;
            
            Processo proc0=new Processo();
            Thread p1=new Thread(proc0);
            
            frame.add(proc0.Elemento); //Aggiungo gli oggetti JPanel al FRAME
            frame.setVisible(true);
            
            p1.start(); //Avvio il Thread
        }
    }
    Riga nella quale segna l'errore:
    codice:
     for(int i=0;i<MAX_OGGETTI; i++) cerchio[i].disegna(g2d);
    Spero di poter riuscire

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,216
    Ok, non avevo visto bene quel che fai nel metodo crea().
    Non è sufficiente quella modifica perchè c'è dell'input utente che serve alla creazione dell'array... e l'array deve essere considerato creato solo DOPO che tutto l'input utente è terminato.

    Serve una variabile booleana che controlli questa cosa.

    codice:
    public class creaOggetti ... {
       ...
       boolean creato = false;
       ...
       public void crea() {
          ...
          for(int i=0; i<MAX_OGGETTI; i++) {
             ...
          }
    
          // Nota bene: va fatto DOPO il ciclo for
          creato = true;
       }
       ...
       public void paintComponent(Graphics g) {
          super.paintComponent( g );
          if ( creato ) {
             ...   // posso usare l'array
          }
       }
    }

    Come ho detto anche nell'altro forum, il design non va affatto bene: bisognerebbe separare la gestione dell'input utente (che non andrebbe mai fatta in quel modo dentro ad un componente Swing) e far partire il tutto DOPO che i dati sono stati acquisiti... ma diciamo che per funzionare, così, funziona...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Grazie finalmente funziona e ho risolto!

    Quindi per concludere mi conviene separare l'input magari farlo gestire su un'altra finestra a parte (jframe) con dei tasti del tipo: crea oggetto ed istantaneamente compare sull'altro jframe, start (avvia il movimento), genera oggetti casuali etcetc

    Quindi dovrei fare una classe a parte per la gestione Oggetti e strutturarlo così:

    -creaOggetti // Creazione Array, painting per ogni oggetto, movimento etc
    -Oggetto //Caratteristiche oggetto
    -gestisciOggetti //Interfaccia di gestione degli oggetti (tasti: START, STOP, GENERA, MUOVI etcetc);
    -Processo // Creazione, Movimento, Painting,
    -lanciaProgramma // Aggiunta al Main del JPanel contenente gli oggetti e avvio del Thread

    Che ne pensi come struttura? Magari in seguito tramite la classe gestisciOggetti, farò in modo che l'utente definisce il PUNTO di partenza dell'oggetto e di arrivo (fine del percorso) e l'oggetto creato tramite algoritmo dovrà arrivare a destinazione nel minor tempo possibile etcetc

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,216
    Come design non è proprio il massimo, comunque l'idea è quella: separare la gestione dell'input da ciò che è grafica.
    Tieni presente che l'interazione dei thread custom con la grafica (painting e accesso ai componenti) è piuttosto critica e deve seguire determinate regole (fai una ricerca in merito ad EDT [Event Dispatch Thread] e i metodi invokeLater e invokeAndWait di SwingUtilities).

    Ricordo, inoltre, le regole di nomenclatura Java a cui tutti si dovrebbero uniformare:

    1) I nomi delle classi e delle interfacce vanno scritti con l'iniziale Maiuscola e seguire la notazione camel-case (cioè ogni iniziale di parola va maiuscola, ec: LanciaProgramma)

    2) I nomi dei metodi e delle variabili vanno scritti con l'iniziale minuscola e seguire la notazione camel-case (es: cambiaColore() )

    3) I nomi delle costanti (membri static final) vanno scritti con tutte le lettere MAIUSCOLE (es: MAX_OGGETTI)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2022 vBulletin Solutions, Inc. All rights reserved.