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 dei cerchi 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, ma nel momento in cui rendo "Dinamica" la cosa,
creando un vettore di oggetti, essi non compiono 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):
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:
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):
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) {
super.paint(g);
Graphics2D g2d=(Graphics2D) g;
for(int i=0;i<MAX_OGGETTI; i++) cerchio[i].paint(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
}
}
Spero di poter risolvere al piu' presto, intanto vi ringrazio in anticipo!
Non compaiono gli oggetti sullo schermo !