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 !

Rispondi quotando



