📄 gracie.java
字号:
package main;
import java.awt.*;
import javax.swing.*;
import java.util.*;
public abstract class Gracie extends JPanel implements Runnable{
public int[] array;
public int width=150,height=240,step,increase,sleep=30;
public myPanel parent;
public String time=new String();
public boolean start=false;
public long startL,endL;
public Color[] color=new Color[]{ new Color(0,0,255),
new Color(255,0,0),new Color(0,255,0),new Color(206,206,206),
new Color(46,46,46)};
private Result result=new Result();
public abstract String getName();
public abstract String getCommand();
public abstract void sort();
public void setState(boolean b){
start=b;
}
public boolean getState(){
return start;
}
public void init(int[] a){
array=a;
repaint();
}
public void exchange(int i,int j){
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
Graphics g=getGraphics();
g.setColor(color[4]);
g.drawLine(0,step+i*2,array[i]*increase,step+i*2);
g.setColor(color[3]);
g.drawLine(array[i]*increase,step+i*2,width,step+i*2);
g.setColor(color[4]);
g.drawLine(0,step+j*2,array[j]*increase,step+j*2);
g.setColor(color[3]);
g.drawLine(array[j]*increase,step+j*2,width,step+j*2);
g.dispose();
try{
Thread.sleep(sleep);
}
catch(InterruptedException e){e.printStackTrace();}
}
public void draw(int h1,int h2,int h3){
Graphics g=getGraphics();
if(h1>0){
g.setColor(color[0]);
g.drawLine(0,step+h1*2,width,step+h1*2);
}
if(h2>0){
g.setColor(color[1]);
g.drawLine(0,step+h2*2,width,step+h2*2);
}
if(h3>0){
g.setColor(color[2]);
g.drawLine(0,step+h2*2,width,step+h2*2);
}
g.dispose();
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
step=(int)((height-array.length*2)/2);
increase=(int)(getSize().width/array.length);
Image offI=createImage(width,height);
Graphics offS=offI.getGraphics();
parent.validate();
offS.setColor(Color.white);
offS.fillRect(0,0,width,height);
for(int k=0;k<array.length;k++){
offS.setColor(color[4]);
offS.drawLine(0,step+k*2,array[k]*increase,step+k*2);
offS.setColor(color[3]);
offS.drawLine(array[k]*increase,step+k*2,width,step+k*2);
}
g.drawImage(offI,0,0,null);
/*
for(int k=0;k<array.length;k++){
g.setColor(color[4]);
g.drawLine(0,step+k*2,array[k]*increase,step+k*2);
g.setColor(color[3]);
g.drawLine(array[k]*increase,step+k*2,width,step+k*2);
}*/
}
public void setParent(myPanel p){
parent=p;
}
public Dimension getPreferredSize(){
return new Dimension(width,height);
}
public void timeBegin(){
parent.result.setText("所用时间");
startL=System.currentTimeMillis();
}
public void timeEnd(){
endL=System.currentTimeMillis();
time=String.valueOf(endL-startL);
parent.result.setText(time+"ms");
result.notifyObservers();
}
public void run(){
while(true){
if(start){
timeBegin();
sort();
timeEnd();
start=false;
}
try{Thread.sleep(1000);}
catch(InterruptedException e){e.printStackTrace();}
}
}
public void addObserver(Observer o){
result.addObserver(o);
}
public class Result extends Observable{
public void notifyObservers(){
setChanged();
super.notifyObservers();
}
public String[] getResult(){
return new String[]{getName(),time};
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -