📄 demo.java
字号:
import java.awt.*;
public class Demo extends Canvas
{
private int m_iSleepTime = 80;
private String m_sInitData;
private char[] m_sData=new char[12];
private int m_iDataNum;
private int m_iNumLines=9; //souceCode lines;
private int tempx;
private int tempy;
private int basex=20;
private int basey=10;
private int dx=30;
private int dy=10;
private int width=20;
private int height=30;
private int m_iIndex;
private int m_jIndex;
private int m_iStep=-1;
private int m_jCur=-1;
private boolean m_bStarted=false;
private boolean m_bSortType=true;
public void reset(String data,boolean bool)
{
m_sInitData=data;
tempx=-1;
tempy=-1;
m_iIndex=-1;
m_jIndex=-1;
m_iStep=-1;
m_jCur=-1;
m_sData[0]=' ';
m_bSortType=bool;
for(int i=1;i<data.length()+1;i++)
m_sData[i]=data.charAt (i-1);
m_iDataNum=m_sInitData.length ();
dx=300/m_iDataNum;
m_bStarted=false;
repaint();
//drawInit();
}
public void init()
{
m_iDataNum=1;
tempx=-1;
tempy=-1;
m_bStarted=false;
m_bSortType=true;
}
private void delay()
{
try{ Thread.sleep(m_iSleepTime); }
catch(InterruptedException e){}
}
private boolean compare(char ch1,char ch2)
{
if(m_bSortType)
return(ch1<ch2);
else
return(ch1>ch2);
}
private void drawInit()
{
Graphics m_graph=getGraphics();
m_graph.drawString ("初始数据:",20,10);
Color bk=getBackground();
for(int i=0;i<m_sInitData.length ();i++)
{
drawNode(m_sInitData.charAt (i),i+1,1,bk,Color.black ,m_graph);
}
}
private void drawNode(char ch,int i,int j,Color bkColor,Color fgColor,Graphics g)
{
Color old=g.getColor ();
g.drawRect (basex+i*dx, basey+j*dy, width, height);
g.setColor (bkColor);
g.fillRect (basex+i*dx+1, basey+j*dy+1, width-1, height-1);
char c[]={' ',' '};
c[0]=ch;
g.setColor (fgColor);
g.drawChars(c,0,1,basex+i*dx+width/3+1,basey+j*dy+height*2/3);
g.setColor (old);
}
public void drawArrow(char ch,int i,int j,Color color,Graphics g)
{
Color old=g.getColor ();
g.setColor(color);
char c[]={' ',' '};
c[0]=ch;
int x=basex+i*dx+width/3+7;
int y=basey+j*dy+height+5;
g.drawChars(c,0,1,x-8,y+15);
g.drawLine (x,y,x,y+20);
g.drawLine (x,y,x+2,y+5);
g.drawLine (x,y,x-3,y+5);
g.setColor (old);
}
public void moveNode(char ch,int start,int end,Color bkColor, Color fgColor)
{
Graphics g=getGraphics();
Color bk=getBackground();
Color old=g.getColor();
int ti=start;
int tj=end;
if(end==0)
{
ti=start;
tj=10;
while(tj>6)
{
g.setColor (bk);
g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);
g.setColor(old);
drawNode(ch,ti,tj-1,bk,fgColor,g);
delay();
tj-=1;
}
while(ti>0)
{
g.setColor (bk);
g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);
g.setColor(old);
drawNode(ch,ti-1,tj,bk,fgColor,g);
delay();
ti-=1;
}
while(tj<10)
{
g.setColor (bk);
g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);
g.setColor(old);
drawNode(ch,ti,tj+1,bk,fgColor,g);
delay();
tj+=1;
}
}
else if(start==0)
{
ti=0;
tj=10;
while(tj>6)
{
g.setColor (bk);
g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);
g.setColor(old);
drawNode(m_sData[0],0,10,Color.cyan,Color.yellow,g);
drawNode(ch,ti,tj-1,bk,fgColor,g);
delay();
tj-=1;
}
while(ti<end)
{
g.setColor (bk);
g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);
g.setColor(old);
drawNode(ch,ti+1,tj,bk,fgColor,g);
delay();
ti+=1;
}
while(tj<10)
{
g.setColor (bk);
g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);
g.setColor(old);
drawNode(ch,ti,tj+1,bk,fgColor,g);
delay();
tj+=1;
}
}
}
public void paint(Graphics g)
{
//Rectangle r=g.getClipBounds ();
//g.clearRect (r.x,r.y,r.width ,r.height );
drawInit();
if(m_bStarted)
{
if(m_iStep==9)//over
{
g.drawString ("排序结果:",20,100);
for(int i=1;i<m_iDataNum+1;i++)
drawNode(m_sData[i],i,10,getBackground(),Color.black ,g);
}
else
{
drawNode(m_sData[0],0,10,Color.cyan ,Color.red ,g);
Color color;
for(int i=1;i<m_iDataNum+1;i++)
{
if(i!=m_jCur)
{
if(i!=m_iIndex&&i!=m_jIndex) color=Color.black ;
else color=Color.yellow ;
drawNode(m_sData[i],i,10,getBackground(),color,g);
}
}
if(m_iIndex>=2)
drawArrow('i',m_iIndex,10,Color.red,g);
if(m_jIndex>0&&(m_jIndex!=m_iIndex))
drawArrow('j',m_jIndex,10,Color.red,g);
}
}
}
public int proceed(int step)
{
int nextStep=0;
switch(step)
{
case -1: m_bStarted=true;
m_iStep=0;
nextStep=0;
break;
case 0: m_bStarted=true;
m_iStep =0;
nextStep=2;
break;
case 2: if(m_iIndex<=0&&2<m_iNumLines) //start
{
m_iIndex=2;
m_iStep=2;
nextStep=4;
}
else if(m_iIndex<m_iDataNum) //already begin
{
m_iIndex++;
m_iStep=2;
nextStep=4;
}
else
{
m_iStep=9;
nextStep=9;
}
m_jIndex=-1;
break;
case 4:
moveNode(m_sData[m_iIndex],m_iIndex,0,Color.gray,Color.yellow);
m_sData[0]=m_sData[m_iIndex];
nextStep=5;
m_jIndex=m_iIndex-1;
m_jCur=m_iIndex;
m_iStep=4;
break;
case 5:
//if(m_jIndex!=m_iIndex-1) m_jIndex--;
for(int i=0;i<3;i++)
{
drawNode(m_sData[0],0,10,Color.red ,Color.yellow ,getGraphics());
drawNode(m_sData[m_jIndex],m_jIndex,10,Color.red ,Color.yellow ,getGraphics());
delay();
delay();
drawNode(m_sData[0],0,10,Color.cyan ,Color.yellow ,getGraphics());
drawNode(m_sData[m_jIndex],m_jIndex,10,getBackground() ,Color.yellow ,getGraphics());
delay();
delay();
}
if(compare(m_sData[0],m_sData[m_jIndex]))
{
nextStep=6;
}
else
nextStep=7;
break;
case 6:
m_sData[m_jIndex+1]=m_sData[m_jIndex];
m_jCur=m_jIndex;
m_iStep=6;
nextStep=5;
m_jIndex--;
break;
case 7:
moveNode(m_sData[0],0,m_jIndex+1,Color.gray,Color.yellow);
m_sData[m_jIndex+1]=m_sData[0];
m_jCur=-1;
m_iStep=7;
nextStep=8;
break;
case 8: m_iStep=8;//m_iStep=2;
nextStep=2;
break;
case 9: m_iStep=9;
nextStep=-1;
break;
}
repaint();
return nextStep;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -