2009-05-14 5 views
3

Ich benutze eine SWT ScrolledComposite, aber wenn ich in Windows scrollen bekomme ich ein paar Tränen/Flackern, wenn ich schnell scrollen. Was kann ich tun, um diesen Effekt doppelt zu puffern oder zu reduzieren, oder was kann ich tun, um die Standard-Scroll-Funktionalität zu überschreiben und sie sanfter scrollen zu lassen? Es gibt Textfelder im Scrollbereich, also glaube ich nicht, dass eine Leinwand funktioniert.Wie kann man SWT Composite flüssig scrollen?

Antwort

0

Der Trick besteht darin, mit Verzögerung zu spielen und ein Pixel-Scrolling zu verwenden.

Hier sind Teile des Codes, wie ich das eigentlich tun:

public void scrollOnePixelUp() { 
    scrolledComposite.getContent().setLocation(0, scrolledComposite.getContent().getLocation().y - 1); 
} 

public void scrollOnePixelDown() { 
    scrolledComposite.getContent().setLocation(0, scrolledComposite.getContent().getLocation().y + 1); 
} 

private int pixelScrollDelay = 50;//ms 

scrollingThread = new Thread() { 
    public void run() { 
     doScrolling = true; 
     int i = 0; 
     while((i < scrollLength) && running && doScrolling) { 
      i++; 

      if (d.isDisposed()) 
       return; 
      d.asyncExec(new Runnable() { 
       public void run() { 
        if (scrollUp) 
         scrollOnePixelUp(); 
        else 
         scrollOnePixelDown(); 
       }      
      }); 


      try { 
       sleep(pixelScrollDelay); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
     doScrolling = false; 
    } 
}; 

Hoffnung, das hilft!