📄 frame1.java
字号:
package mandelthread;
import java.awt.BorderLayout;
import java.awt.*;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Frame1 extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane=(JPanel)getContentPane();
contentPane.setLayout(borderLayout1);
setSize(new Dimension(400,400));
setTitle("分形图形");
contentPane.setBackground(Color.BLUE);
JMenuBar menuBar=new JMenuBar();
JMenu menu=new JMenu("Menu");
JMenuItem draw=new JMenuItem("Draw",'D');
draw.addActionListener(new AbstractAction(){
public void actionPerformed(ActionEvent e){
canvas.draw();
}
});
JMenuItem exit=new JMenuItem("Exit",'E');
exit.addActionListener(new AbstractAction(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
menu.add(draw);menu.add(exit);
menuBar.add(menu);
canvas=new MandelPanel();
this.setJMenuBar(menuBar);
contentPane.add(canvas,BorderLayout.CENTER);
show();
}
private MandelPanel canvas;
}
class MandelPanel extends JPanel{
public MandelPanel(){makeColors();}
protected void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.BLUE);
}
public void draw(){new MandelThread1(this).start();}
public Color[] getColors(){return colors;}
private void makeColors(){
int maxRGB=255,r=0,g=0,b=0;
colors=new Color[MaxColors+1];
for(int i=0;i<MaxColors;i++){
colors[i]=new Color(r,g,b);
r+=MaxColors;
if(r>maxRGB){
r=0;g+=MaxColors;
if(g>maxRGB){
g=0;
b+=MaxColors;
}
if(b>maxRGB)
b=0;
}
}
colors[MaxColors]=Color.white;
}
private static Color[] colors;
private static final int MaxColors=25;
}
class MandelThread1 extends Thread{
public MandelThread1(MandelPanel p){mp=p;}
public void run(){
drawMandel(mp.getGraphics());
}
public Thread getThread(){return this;}
private void drawMandel(Graphics g){
mp.repaint();
double xstep,ystep,x,y,real,imag,spread;
int i,j,iter,k=0;
Complex c1=new Complex(),c2=new Complex();
xstep=div/mp.getWidth();ystep=div/mp.getHeight();
Color[] colors=mp.getColors();
int MaxColors=colors.length-1;
for(y=start,j=0;y<=limit;y+=ystep,j++){
for(x=start,i=0;x<=limit;x+=xstep,i++){
c1.real=x;c1.imag=y;
c2.real=c2.imag=0.0;
for(iter=0;iter<MaxColors;iter++){
real=c1.real+c2.real;
imag=c1.imag+c2.imag;
c2.real=real*real-imag*imag;
c2.imag=2*real*imag;
spread=c2.real*c2.real+c2.imag*c2.imag;
if(spread>MaxSpread)
break;
}
g.setColor(colors[iter]);
g.fillRect(i,j,1,1);
if(++k%4==0){
try{
sleep(1);
}catch(InterruptedException e){}
k=0;
}
}
}
}
class Complex{
double real;
double imag;
}
private MandelPanel mp;
private static final double MaxSpread=4.0;
private static final double limit =1.0;
private static final double start=-1.0;
private static final double div=2.0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -