⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithmanimation.java

📁 此文件名叫暑期
💻 JAVA
字号:
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;
import java.util.concurrent.*;
import javax.swing.*;
public class AlgorithmAnimation {
public static void main(String[] args){
	JFrame frame = new AnimationFrame();
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setVisible(true);
}
}
class AnimationFrame extends JFrame{
	public AnimationFrame(){
		ArrayPanel panel = new ArrayPanel();
		add(panel,BorderLayout.CENTER);
		
		Double[] values = new Double[VALUES_LENGTH];
		final Sorter sorter = new Sorter(values,panel);
		
		JButton runButton = new JButton("Run");
		runButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				sorter.setRun();
			}
		});
		JButton stepButton = new JButton("step");
		stepButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				sorter.setStep();
			}
		});
		JPanel buttons = new JPanel();
		buttons.add(runButton);
		buttons.add(stepButton);
		add(buttons,BorderLayout.NORTH);
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		
		for(int i =0;i<values.length;i++){
			values[i]=new Double(Math.random());
		}
		Thread t = new Thread(sorter);
		t.start();
	}
	private static final int DEFAULT_WIDTH = 300;
	private static final int DEFAULT_HEIGHT =300;
	private static final int VALUES_LENGTH = 30;
}
class Sorter implements Runnable{
	public Sorter(Double[] values,ArrayPanel panel){
		this.values = values;
		this.panel = panel;
		this.gate= new Semaphore(1);
		this.run=false;
	}
	public void setRun(){
		run = true;
		gate.release();
		
	}
	public void setStep(){
		run = false;
		gate.release();
	}
	public void run(){
		Comparator<Double>comp = new Comparator<Double>(){
			public int compare(Double i1,Double i2){
				panel.setValues(values,i1,i2);
				try{
					if(run)
						Thread.sleep(DELAY);
					else
						gate.acquire();
				}
				catch(InterruptedException exception){
					Thread.currentThread().interrupt();
				}
				return i1.compareTo(i2);
			}
		};
		Arrays.sort(values,comp);
		panel.setValues(values,null,null);
			
		
	}
	private Double[] values;
	private ArrayPanel panel;
	private Semaphore gate;
	private static final int DELAY = 100;
	private boolean run;
}
class ArrayPanel extends JPanel{
	public void paintComponent(Graphics g){
		if(values ==null)return;
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D)g;
		int width = getWidth()/values.length;
		for(int i = 0;i<values.length;i++){
			double height = values[i]*getHeight();
			Rectangle2D bar =new Rectangle2D.Double(width * i,0,width,height);
			if(values[i]==marked1 || values[i]==marked2)
				g2.fill(bar);
			else
				g2.draw(bar);
		}
	}
	public void setValues(Double[] values,Double market1,Double marked2){
		this.values = values;
		this.marked1 = marked1;
		this.marked2 = marked2;
		repaint();
	}
	private Double marked1;
	private Double marked2;
	private Double[] values;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -