import java.applet.Applet;  
import java.awt.*;  
import java.awt.event.*;  
public class Sort extends Applet implements Runnable{  
     public  static int[] data={18,4,17,5,13,8,14,7,10,16,11,3,19,2,20,15,6,9,1,12};  
     Button bt=new Button("Start");  
           int x=50,y=100;  
           Graphics g=getGraphics();  
     public void init(){  
          add(bt);  
          this.setSize(300,300); 
          bt.addActionListener(new ActionListener(){  
                  public void actionPerformed(ActionEvent e){  
                             if(e.getSource()==bt)threadStart(); 
                 }  
          }); 
     }  
     public void threadStart(){ 
         new Thread(this).start(); 
     } 
     public void paint(Graphics g){ 
           g.setColor(Color.green);  
           g.setFont(new Font("TimesRoman",Font.PLAIN,12));  
          for(int k=-1;++k  <data.length;){ 
                g.drawRect(x,y+10*k,10*data[k],5);  
                g.fillRect(x,y+10*k,10*data[k],5);  
                g.drawString(String.valueOf(data[k]),x+10*data[k]+15,y+10*(k+1));  
              } 
          } 
     public void run() { 
            sort(data); 
            } 
   public void sort(int a[]){  
    for (int i = a.length; --i>=0;)  
      for (int j = 0; j  <i; j++) { 
          if (a[j] > a[j+1]) { 
              int T = a[j]; 
              a[j] = a[j+1]; 
              a[j+1] = T; 
              repaint(); 
              try { 
                Thread.sleep(1000); 
                  } catch (InterruptedException e) { 
                      e.printStackTrace(); 
                  } 
              } 
          } 
    } 
} 以上是实现排序过程的演示,大虾帮忙在排序过程中实现一下“暂停”和“继续”功能

解决方案 »

  1.   

    import java.applet.Applet;   
    import java.awt.*;   
    import java.awt.event.*; public class Sort extends Applet
    {
    public static int[] data={18,4,17,5,13,8,14,7,10,16,11,3,19,2,20,15,6,9,1,12};   
        
        Thread t;
        sortRunnable sr;
        
        Button bt=new Button("Start");
        Button pause = new Button("Pause");   
        
        int x=50,y=100;
        Graphics g=getGraphics();   
           
        public void init(){
         sr = new sortRunnable(this);
            t = new Thread(sr);
         add(bt);
         add(pause);
         t.start();
        
         pause.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e)
         {
         sr.isSorting=false;
         }
         });
            
            bt.addActionListener(new ActionListener(){   
               public void actionPerformed(ActionEvent e){   
                  if(e.getSource()==bt)
                  {
                   sr.isSorting=true;
                  } 
               }   
             });  
        }   
        
       
        public void paint(Graphics g){
         g.setColor(Color.green);   
            g.setFont(new Font("TimesRoman",Font.PLAIN,12));   
            
            for(int k=-1;++k<data.length;)
            {
             g.drawRect(x,y+10*k,10*data[k],5);   
                g.fillRect(x,y+10*k,10*data[k],5);   
                g.drawString(String.valueOf(data[k]),x+10*data[k]+15,y+10*(k+1));   
            }  
        }  
            
        public void sort()
        {
         System.out.println("running");
         int a[]=data;
         for (int i = a.length; --i>=0;)
           for (int j = 0; j   <i; j++) 
           {
            if (!sr.isSorting) return;
            if (a[j] > a[j+1])
            {
            int T = a[j];  
                    a[j] = a[j+1];  
                    a[j+1] = T;  
                    repaint();  
                    try {
                     Thread.sleep(1000);  
                    } catch (InterruptedException e) {  
                          e.printStackTrace();  
                    }  
                }  
              }  
        }  
    } class sortRunnable implements Runnable
    {
    Sort s;
    boolean isSorting=false;

    public sortRunnable(Sort sr)
    {
    s = sr;
    }

    public void run()
    {
    while(true){

    if(isSorting){
      s.sort();
    }
    }
    }
    }
      

  2.   

    java code
    class sortRunnable implements Runnable
    {
        Sort s;
        boolean isSorting=false;
        
        public sortRunnable(Sort sr)
        {
            s = sr;
        }
        
        public void run()
        {
            while(true){
                
                if(isSorting){
                  s.sort();
                }
            }
        }
      

  3.   

    我寫了一個自以爲還可以的
    import java.applet.Applet;  
    import java.awt.*;  
    import java.awt.event.*;  
    public class Sort extends Applet implements Runnable{  
         public  static int[] data={18,4,17,5,13,8,14,7,10,16,11,3,19,2,20,15,6,9,1,12};  
         Button bt=new Button("Start"); 
         Button bt2=new Button("Parse"); 
         Button bt3=new Button("Go on");
         boolean isParse=true;
               int x=50,y=100;  
               Graphics g=getGraphics();  
         public void init(){  
              add(bt);
              add(bt2);
              add(bt3);  
              this.setSize(300,300); 
              bt.addActionListener(new ActionListener(){  
                      public void actionPerformed(ActionEvent e){
                                isParse=false; 
                                 if(e.getSource()==bt)threadStart(); 
                                 bt.setEnabled(false);
                     }  
              });
              bt2.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent e){
                                if(e.getSource()==bt2)
                                 isParse=true;
                                             
                     }
              }); 
              bt3.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent e){
                                if(e.getSource()==bt3)
                                 isParse=false;
                                             
                     }
              }); 
         }  
         public void threadStart(){ 
             new Thread(this).start(); 
         } 
         public void paint(Graphics g){ 
               g.setColor(Color.green);  
               g.setFont(new Font("TimesRoman",Font.PLAIN,12));  
              for(int k=-1;++k   <data.length;){ 
                    g.drawRect(x,y+10*k,10*data[k],5);  
                    g.fillRect(x,y+10*k,10*data[k],5);  
                    g.drawString(String.valueOf(data[k]),x+10*data[k]+15,y+10*(k+1));  
                  } 
              } 
         public void run() { 
                sort(data); 
                } 
       public void sort(int a[]){  
        for (int i = a.length; --i>=0;)  
          for (int j = 0; j   <i; j++) { 
             while(isParse); 
              if (a[j] > a[j+1]) { 
                  int T = a[j]; 
                  a[j] = a[j+1]; 
                  a[j+1] = T; 
                  repaint();         
                  try { 
                    Thread.sleep(1000); 
                      } catch (InterruptedException e) { 
                          e.printStackTrace(); 
                      } 
                   
                  
                  } 
              } 
        } 
    }