2009-08-06 16 views
6

VerticalPanel, boyut değiştirdiğinde tetiklenecek şekilde bir DikeyPanel'e nasıl bir dinleyici/işleyici eklerim?Yeniden boyutlandırma dinleyicisi/işleyiciyi GWT'de DikeyPanel'e Ekleme

VerticalPanel myPanel = new VerticalPanel(); 
//... code to add child widgets that may change the size of the parent vertical panel ... 

myPanel.addHandler(new ResizeHandler() { 
    public void onResize(final ResizeEvent event) { 
    //... code to handle resize of vertical panel ... 
    } 

}, ResizeEvent.getType()); 

ancak işleyicisi tetiklenir almaz:

temelde aşağıdaki denedim.

cevap

16

Ne güvenilir bir şekilde çalışır pencere düzeyinde boyutlandırma dinleyicidir:

Window.addResizeHandler(new WindowResizeHandler()) 

Kişisel boyutlandırma işleyicisi kullanıcı tarayıcı penceresini boyutlandırdığında adı verilecek:

public void onResize(ResizeEvent event) 

Sen hiç event.getHeight() ve event.getWidth() kullanabilirsiniz güncellenmiş pencere boyutlarını edinin.

Yalnızca bu olayı bir bütün olarak ele aldığınız için, yaymak istediğiniz bileşenlere kendi yayılımınızı yapmalısınız. Genelde sadece bir doLayout() yöntemimi kendim ararım. Bu yöntem, yeniden boyutlandırma olayının yüksekliğine ve genişliğine bile gerek duymaz; çünkü DLH zaten yorumda bulunduğunda, bildirimlerinizi aldığınızda bileşenlerin çoğunu isteyebilir ve hesaplamalarınızı bununla yapabilirsiniz.

Maalesef bazı tarayıcılar onResize olayını çok sık yapmıyor. Güncellemelere karşı çıldırmamaya çalışırken, bazen "saniyeler" için beklerken uygulamanızı görünür bir şekilde çirkin bir şekilde bırakarak bir kaç saniyeliğine etkinliğe devam edebilirler. Bu nedenle, mümkün olduğunda, "CSS" savaşı, tablolardaki tablolara bağlı olarak, düzeninizi CSS'ye bırakmanız gerekebilir.

5

VerticalPanel herhangi bir olayı başlatmaz. Tarayıcı, bir Tablodaki (veya DIV ya da gerçekte neredeyse herhangi bir HTML öğesi) yeniden boyutlandırma olaylarını desteklemediğinden, bu olayları eklemek gerçekten mümkün değildir.

Almak istediğiniz etki nedir? MyPanel değiştirildiği zaman bildirim almak ister misiniz? o zaman belki de widget'lar eklendiğinde veya kaldırıldığında VerticalPanel'i genişletmeli ve özel bir olayı tetiklemelisiniz.

+0

Sonuçta, tarayıcıyı VerticalPanel'deki değişikliklere (boyutlandırmaya ihtiyacım olan bir tür otomatik boyutlandırma özelliği) göre boyutlandırmak istiyorum. Bu değişiklikler esas olarak VerticalPanel tarafından bulunan widget'ların yeniden boyutlandırılmasıyla gerçekleştirilir. Örneğin, katlanabilir satırları olan bir TreeGrid widget'ım var. Kullanıcı bir satırı genişletirse/daraltırsa, muhafazanın yüksekliğini değiştirir. Sanırım tavsiyelerinizi alabilir ve eklenen widget'lardaki değişiklikleri dinlemek için VerticalPanel'i genişletebilirim. Ancak problem, panelin yüksekliğini piksel olarak elde etmek için bir işlev olmamasıdır (en azından benim bilgimize). – P4ndaman

+0

Sadece piksel cinsinden yükseklik elde etmek için UIObject sınıfından getOffsetHeight() öğesini çağırın. – DLH

+0

Heh bunu yeni öğrendim, teşekkürler. – P4ndaman

İlgili konular