Salve a tutti, questa è la prima volta che chiedo aiuto ad un forum, spero di essere saustiva nel spiegare il mio problema e spero soprattutto che ci sia qualcuno in grado di aiutarmi.
Ho scritto un programmino in java che mi crea un frattale e poi lo fa rimbalzare per tutta la finestra. Il frattale rimbalza fin tanto che il ciclo che determina la sua posizione va avanti, ma un volta terminto non riesco più a chiudere la finestra. Qualcuno saprebbe dirmi cosa devo scrivere per risolvere questo problema?
Qui sotto vi posto tutte le classi
1)VonKock.java
codice:import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JPanel; import java.lang.*; public class VonKock { public static Point trovaP1(Point a,Point b) { Point p1 = new Point(); p1.x = a.x + (int)(0.33 * (double)(b.x - a.x)); p1.y = a.y + (int)(0.33 * (double)(b.y - a.y)); return p1; } public static Point trovaP2(Point a,Point b,Point p1) { Point p2 = new Point(); Double l = a.distance(b); Double beta = (Math.PI / 3.0) + Math.atan2((b.y - a.y) ,(b.x - a.x)); p2.x = p1.x + (int)((l / 3.0)* Math.cos(beta)); p2.y = p1.y + (int)((l / 3.0)*Math.sin(beta)); return p2; } public static Point trovaP3(Point a,Point b) { Point p3 = new Point(); p3.x = a.x + (int)(0.66 * (double)(b.x - a.x)); p3.y = a.y + (int)(0.66 * (double)(b.y - a.y)); return p3; } public static void disegna(Point a, Point b, Graphics g, boolean dis) { if(dis==true) //DEVO DISEGNARE g.setColor(Color.RED); else //"CANCELLO" g.setColor(Color.BLACK); if(a.distance(b)<=4) g.drawLine(a.x, a.y, b.x, b.y); else { Point p1,p2,p3; p1 = trovaP1(a,b); p2 = trovaP2(a,b,p1); p3 = trovaP3(a,b); disegna(a,p1,g,dis); disegna(p1,p2,g,dis); disegna(p2,p3,g,dis); disegna(p3,b,g,dis); } } }
2)MioFrame.java
codice:import java.awt.Frame; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JPanel; public class MioFrame extends Frame implements WindowListener { private MioCanvas theCanvas; public MioFrame() { this.setSize(800, 800); this.setVisible(true); this.addWindowListener(this); theCanvas = new MioCanvas(800,800); theCanvas.setLocation(100, 100); this.add(theCanvas); } public void windowOpened(WindowEvent e) { } public void windowClosing(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } }
3)MioCanvas.java
codice:import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.lang.Thread; import java.util.logging.Level; import java.util.logging.Logger; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JPanel; public class MioCanvas extends Canvas { private int width,height; @SuppressWarnings("empty-statement") public MioCanvas(int w,int h) { setSize(w,h); width = w; height = h; } @Override public void paint(Graphics g) { g.setColor(Color.black); g.fillRect(0, 0, width,height); boolean dis = true; int versodiviaggio = 3; /* * se 0 in basso a destra * se 1 in alto a destra * se 2 in alto a sinistra * se 3 in basso a sinistra */ /* *@param x coordinata iniziale Orizzontale della stella *@param y coordinata inizile Verticale della stella */ int x,y; x= 200; y= 400; for(int i=0; i< 100; i = i+ 3) { Point p1 = new Point( x,y ); Point p2 = new Point( x+50,y ); Point p3 = new Point( (x+(x+50))/2,y-50); VonKock.disegna(p1, p2, g,dis); VonKock.disegna(p3,p1,g,dis); VonKock.disegna(p2,p3,g,dis); try { Thread.sleep(15); } catch (InterruptedException ex) { Logger.getLogger(MioCanvas.class.getName()).log(Level.SEVERE, null, ex); } dis = !dis; p1 = new Point( x,y ); p2 = new Point( x+50,y ); p3 = new Point( (x+(x+50))/2,y-50); VonKock.disegna(p1, p2, g,dis); VonKock.disegna(p3,p1,g,dis); VonKock.disegna(p2, p3, g,dis); dis = !dis; System.out.println(p1); if ( p1.getY()>=height-50 || p1.getX()<=0 || p2.getX()>=width-18 || p3.getY()<=0 ){ System.out.println("ECCO QUANDO CAMBIA: "+p1); versodiviaggio = versodiviaggio==3 ? 0 : ++versodiviaggio; } switch(versodiviaggio) { case 0: x+=1; y+=1; break; case 1: x+=1; y-=1; break; case 2: x-=1; y-=1; break; case 3: x-=1; y+=1; break; } } } }
4)Main.java
codice:import java.awt.*; import javax.swing.*; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.event.*; public class Main { public static void main(String[] args) { MioFrame f = new MioFrame(); } }

Rispondi quotando
Grazie mille per l'aiuto, adesso riesco a chiudere la finestra.
