2009-12-21 8 views
16

मैं यूआईबींडर का उपयोग कर जीडब्ल्यूटी 2.0 के तहत काम कर रहा एक सरल लेआउट प्राप्त करने की कोशिश कर रहा हूं। जिस लेआउट को मैं प्राप्त करने का प्रयास कर रहा हूं वह वह है जो जावा के बॉर्डरलाइट की नकल करता है जहां आप उत्तर, दक्षिण, पूर्व, पश्चिम और केंद्र दिशाओं में विभिन्न पैनल निर्दिष्ट कर सकते हैं; इसके लिए मैं डॉकलेआउट पैनेल का उपयोग कर रहा हूं। मैं निश्चित चौड़ाई के साथ, एक शीर्षलेख और पाद लेख प्राप्त करना चाहता हूं। शेष व्यूपोर्ट स्पेस को डॉकलेआउट पैनेल सेंटर स्लॉट को आवंटित विजेट द्वारा कब्जा कर लिया जाएगा।GWT 2.0 में DockLayoutPanel और UiBinder का उपयोग कर लेआउट विजेट कैसे करें?

वर्तमान .ui.xml फ़ाइल मुझे मिल गया है है:

<g:DockLayoutPanel unit='EM'> 
    <g:north size='2'> 
     <g:HTML>HEADER</g:HTML> 
    </g:north> 

    <g:south size='2'> 
     <g:HTML>FOOTER</g:HTML> 
    </g:south> 

    <g:center> 
     <g:HTML> 
      <div id='loginform'>Hello!</div> 
     </g:HTML> 
    </g:center> 
</g:DockLayoutPanel> 

ब्राउज़र केवल ऊपरी बाएं कोने में हैडर बना देता है। मैं जिस लेआउट को ढूंढ रहा हूं उसे कैसे प्राप्त कर सकता हूं? ऐसा लगता है कि जीडब्ल्यूटी लेआउट पैनलों का उपयोग करने से पहले आपको और सीएसएस पता होना चाहिए, लेकिन इस तरह के यूआई को बनाने के उद्देश्य से इस तरह की हार होती है।

उत्तर

29

यह राफेलो द्वारा सुझाए गए किसी भी हैक के साथ मेरे लिए काम करता है।

डॉकलेआउट पैनेल पर जावाडोक उदाहरण पश्चिम के लिए चौड़ाई के रूप में 1 9 2 का उपयोग करता है। यह गलत है - लेखक शायद सोचा था कि वह पीएक्स का उपयोग कर रहा था, लेकिन वह ईएम का उपयोग कर रहा था। तो यदि आप ज़ूम आउट करते हैं, तो आप देखेंगे कि केंद्र दाएं से बहुत दूर है।

क्या आपने मानक मोड का उपयोग करके अपनी जांच की है? यह DockLayoutPanel के लिए आवश्यक है।

इसके अलावा, यह उल्लेख करना भूल गया कि जब आप अपने एंट्रीपॉइंट क्लास में डॉकलाउट जोड़ते हैं तो रूट रूटआउट पैनेल का उपयोग करना चाहिए - रूटपैनल का उपयोग न करें।

+8

मुझे रूटलाउट पैनेल अस्तित्व से अवगत नहीं था।एक बार जब मैं रूटपनेल के बजाय इसका उपयोग करने के लिए बदल गया, तो सब कुछ अपेक्षित काम करता है। – Cesar

+0

क्या आपको कंसोल में कोई त्रुटि मिल रही है? क्या आप यह देखने के लिए जावडॉक्स उदाहरण (पश्चिम चौड़ाई में सुधार के साथ) का उपयोग करने का प्रयास कर सकते हैं? –

+3

अब यह काम कर रहा है। कोई कंसोल त्रुटियां नहीं। समस्या यह थी कि मैं रूटलाउट पैनेल के बजाय रूटपेनल का उपयोग कर रहा था। – Cesar

0

मैंने आपके कोड ब्लॉक के साथ-साथ DockLayoutPanel के लिए जावाडोक पेज पर नमूना ब्लॉक की कोशिश की और मुझे इसी तरह के परिणाम मिल रहे हैं। DockLayoutPanel के उत्तर अनुभाग में केवल डेटा प्रदर्शित होता प्रतीत होता है। हालांकि जब मैं पृष्ठ खोजता हूं (मैक पर फ़ायरफ़ॉक्स और सफारी का उपयोग करके) अन्य तत्व पाए जाते हैं लेकिन वे कहीं भी नहीं दिख रहे हैं। ऐसा लगता है कि इस पैनल और यूआईबिंदर के साथ एक बग हो सकता है।

+0

इसे आजमाने के लिए धन्यवाद। यदि आप क्लाइंट को भेजे गए कोड का निरीक्षण करते हैं तो आप देख सकते हैं कि अन्य तत्व वहां हैं। मुझे विश्वास है कि यह सीएसएस लेआउट गलत है, लेकिन मुझे इसे डीबग करने के लिए पर्याप्त सीएसएस नहीं पता है। – Cesar

+0

मैं मानता हूं कि यह संभवतः एक सीएसएस बग है लेकिन यह देखकर कि हमने में से किसी ने वास्तव में सीएसएस के साथ कुछ भी नहीं किया है (मैंने अभी डिफ़ॉल्ट का उपयोग किया है) ऐसा लगता है कि यह एक जीडब्ल्यूटी बग है। आप जीडब्ल्यूटी मुद्दे साइट पर एक बग खोलना चाहते हैं (http://code.google.com/p/google-web-toolkit/issues/list) – Carnell

+0

@ राफेलो का जवाब देखें: window.setMargin ("0"); RootLayoutPanel को DockLayoutPanel उदाहरण जोड़ने से पहले चाल चलती है। –

2

नए पेश किए गए लेआउट पैनलों का उपयोग वास्तव में काफी भ्रमित है। लेआउट को पूरे ग्राहक क्षेत्र पर रखने का एक तरीका है। Ui.xml फ़ाइल के अतिरिक्त इसे जावा कोड का थोड़ा सा जरूरी है।

अपने EntryPoint कक्षा में, ui.xml फाइल करने के लिए एक एनोटेशन जो लेआउट वाणी के साथ एक UiBinder परिभाषा जोड़ें:,

@UiTemplate("LayoutDeclarationFile.ui.xml") 
interface DockLayoutUiBinder extends 
     UiBinder<DockLayoutPanel, TheEntryPointChildClass> { 
} 

private static DockLayoutUiBinder uiBinder = GWT 
     .create(DockLayoutUiBinder.class); 
onModuleLoad समारोह में

UiBinder का दृष्टांत, उसकी जड़ प्राप्त करता है और इसे सीधे जोड़ने डीओएम:

public void onModuleLoad() { 
    DockLayoutPanel layout = uiBinder.createAndBindUi(this); 
    // Make sure we use the whole client area 
    Window.setMargin("0px"); 

    // Add the panel to the DOM 
    RootLayoutPanel.get().add(layout); 
} 
+0

इससे मेरे मामले में मदद मिली, हालांकि मुझे अपने विशेष मामले में कुछ समायोजन करना पड़ा, क्योंकि मैं अपने यूआई घटक के लिए एक अलग वर्ग का उपयोग कर रहा हूं। "इंटरफ़ेस DockLayoutUiBinder {}" <- "DockLayoutPanel" का उपयोग करना यहां वास्तव में महत्वपूर्ण हिस्सा था जो मेरे मामले में मदद करता था। – WhyNotHugo

संबंधित मुद्दे