2009-08-06 9 views
6

में वर्टिकलपैनल में आकार बदलने वाले श्रोता/हैंडलर को जोड़ना मैं वर्टिकल पैनेल में श्रोता/हैंडलर कैसे जोड़ूं जैसे जब वर्टिकल पैनेल आकार में बदलता है तो ट्रिगर होता है?जीडब्ल्यूटी

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()); 

लेकिन हैंडलर चालू होने वाले नहीं प्राप्त करता है:

मैं मूल रूप से निम्नलिखित की कोशिश की है।

उत्तर

16

क्या मज़बूती से काम करता है खिड़की स्तर के आकार बदलने के श्रोता है:

Window.addResizeHandler(new WindowResizeHandler()) 

आपका आकार हैंडलर जब उपयोगकर्ता ब्राउज़र विंडो का आकार बदलता है बुलाया जाएगा:

public void onResize(ResizeEvent event) 

आप को event.getHeight() और event.getWidth() उपयोग कर सकते हैं अद्यतन विंडो आयाम प्राप्त करें।

के बाद से आप केवल एक पूरे के रूप में खिड़की के लिए घटना हो रही है, तो आप घटकों आप बाहर रखना चाहते हैं अपने खुद के प्रचार करना होगा। मैं आमतौर पर केवल doLayout() विधि स्वयं को कॉल करता हूं। इस विधि भी, DLH पहले से ही टिप्पणी के रूप में क्योंकि आकार घटना की ऊंचाई और चौड़ाई की जरूरत नहीं है आप उस के साथ अपनी गणना उनके आयामों जब आप सूचना पाने के लिए सबसे अधिक घटकों कह सकता है और करते हैं।

दुर्भाग्य से, कुछ ब्राउज़रों बहुत बार onResize बात नहीं करते हैं। अद्यतनों के साथ पागल नहीं होने की कोशिश में, वे कभी-कभी "उचित" लेआउट की प्रतीक्षा करते समय अपने एप्लिकेशन को बदसूरत रूप से बदसूरत छोड़कर कुछ सेकंड के लिए ईवेंट पर जा सकते हैं। इस प्रकार, जहां संभव हो, आपको "टेबल बनाम सीएसएस" युद्ध, टेबल में अपने रुख के आधार पर सीएसएस और संभवतः लेआउट छोड़ने का प्रयास करना चाहिए।

5

VerticalPanel किसी भी घटनाओं आग नहीं करता है। उन घटनाओं को जोड़ना वास्तव में संभव नहीं है क्योंकि ब्राउज़र किसी तालिका (या वास्तव में डीवी या लगभग किसी भी HTML तत्व) पर आकार बदलने का समर्थन नहीं करता है।

प्रभाव है कि आप प्राप्त करना चाहते हैं क्या है? क्या MyPanel संशोधित होने पर आप अधिसूचित होना चाहते हैं? तो हो सकता है कि आपको वर्टिकल पैनेल का विस्तार करना चाहिए और विगेट्स जोड़े या हटाए जाने पर कस्टम इवेंट को आग लगाना चाहिए।

+0

अंत में मैं आकार करने के लिए ब्राउज़र VerticalPanel में परिवर्तन के आधार पर (स्वत: आकार देने सुविधा का एक प्रकार मैं लागू करने की आवश्यकता) चाहते हैं। ये परिवर्तन प्राथमिक रूप से वर्टिकल पैनेल द्वारा निहित विगेट्स के आकार बदलकर संचालित होते हैं। उदाहरण के लिए, मेरे पास एक ट्रीग्रिड विजेट है जो ढहने वाली पंक्तियों के साथ है। यदि उपयोगकर्ता एक पंक्ति को फैलाता/ढहता है, तो यह कंटेनर की ऊंचाई को बदल देता है। मुझे लगता है कि मैं आपकी सलाह ले सकता हूं और जोड़े गए विजेट्स पर हुए बदलावों को सुनने के लिए वर्टिकल पैनेल का विस्तार कर सकता हूं। लेकिन समस्या यह है कि पैनल की ऊंचाई पिक्सेल में कम से कम करने के लिए कोई फंक्शन नहीं है (कम से कम मेरे ज्ञान के लिए)। – P4ndaman

+0

आप पिक्सल में ऊंचाई प्राप्त करने के लिए यूआईओबीजेक्ट क्लास से getOffsetHeight() को कॉल करते हैं। – DLH

+0

हेह बस इसके बारे में पता चला, धन्यवाद। – P4ndaman