我做了一个简单的程序。
它需要一个半径并创建一个圆。
问题是大数字太慢了,
就像Radius
是100
一样需要约1分钟
(我有一台快速的电脑)。
我认为问题在于:
pane.add(c[a][b]);
这是该计划:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Scanner;
public class mycircle extends JFrame
{
mycircle (int Radius)
{
this.setTitle("Circle Generator - By Joe & Doe");
Container pane = getContentPane();
pane.setLayout(new GridLayout(0,Radius*2+1));
JLabel[][]c=new JLabel[Radius*2+1][Radius*2+1];
for (int a=0; a<c.length; a++)
{
for (int b=0; b<c[0].length; b++)
{
c[a][b]=new JLabel();
c[a][b].setOpaque(true);
pane.add(c[a][b]);
}
}
c[Radius][Radius].setBackground(Color.black);
double y;
for (double x=-Radius; x<=Radius+1; x+=0.01)
{
y=Math.sqrt(Radius*Radius-x*x);
c[(int)y+Radius][(int)x+Radius].setBackground(Color.black);
c[(int)-y+Radius][(int)x+Radius].setBackground(Color.black);
}
this.setVisible(true);
this.setSize(Math.min(Radius*30,850), Math.min(Radius*30,850));
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[]args)
{
System.out.println("Enter Radius");
Scanner in=new Scanner(System.in);
new mycircle (in.nextInt());
in.close();
}
}
有更快的解决方案吗?
如果是,是使用JFrame
还是多线程?