這是困擾我,我的代碼工作並運行,但是當我去運行它時,它似乎循環了兩次循環,任何人都可以用我的邏輯來幫助我嗎?謝謝...paintComponent正在執行兩次
package pkgcirc;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
/*
* Notes:
* Draw 20 circles
* radius/location (x/y/r) all random
* if (circle) is between radii pt (step thru loop) of all values, if its within ,
* draw it cyan if it overlaps, else black
*
*/
public class Main extends JPanel {
int[] radius = new int [3];
int[] xArray = new int [3];
int[] yArray = new int [3];
public Main()
{
Random g = new Random();
setPreferredSize (new Dimension(300, 200));
for(int i = 0; i < radius.length; i++)
{
radius[i] = g.nextInt(50)+1;
xArray[i] = g.nextInt(250)+1;
yArray[i] = g.nextInt(150)+1;
}
}
public void paintComponent(Graphics page)
{
super.paintComponent(page);
for(int i = 0; i < radius.length; i++)
{
for (int j = 0; j < radius.length; j++)
{
int xpoint1 = xArray[i]+radius[i];
int ypoint1 = yArray[i]+radius[i];
int xpoint2 = xArray[j]+radius[j];
int ypoint2 = yArray[j]+radius[j];
int radius1 = radius[i];
int radius2 = radius[j];
boolean Collide = circlesCollide(xpoint1, ypoint1, radius1, radius2, xpoint2, ypoint2);
if (i != j && Collide == false)
{
page.setColor(Color.cyan);
page.fillOval(xArray[i] ,yArray[i], radius[i], radius[i]);
System.out.println("false");
}
else{
System.out.println("true");
page.setColor(Color.black);
page.drawOval(xArray[j] ,yArray[j], radius[j], radius[j]);
}
}
System.out.println("BREAK");
}
}
public boolean circlesCollide(double x1, double y1, double r1, double x2, double y2, double r2){
return (distance(x1, y1, x2, y2) <= (r1 + r2));
}
public double distance(double x1, double y1, double x2, double y2) {
return Math.sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
}
public static void main (String[] args)
{
JFrame frame = new JFrame ("Circles");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add (new Main());
frame.pack();
frame.setVisible(true);
}
}
嗯,是的,這是真的,謝謝你,但由於某種原因,我的變量被重置爲0,它又重新在我的代碼上重新行走。所以它畫錯了...... – novar 2011-01-26 02:42:07
真的嗎?然後在兩個循環中加入一些`System.out.println(「i」+ i);``````````````` – sarnold 2011-01-26 02:45:04