绘制由JLabels制作的圆圈的慢速表现

时间:2015-02-12 14:59:46

标签: java multithreading performance algorithm jframe

我做了一个简单的程序。 它需要一个半径并创建一个圆。 问题是大数字太慢了, 就像Radius100一样需要约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还是多线程?

0 个答案:

没有答案