2008-08-29 15 views
12

मैंने क्या गलत किया?एसडब्ल्यूटी स्क्रॉल किए गए कॉम्पोजिट को अपने बच्चों के हिस्से खाने से रोकें

यहाँ मेरी कोड से एक अंश है:

public void createPartControl(Composite parent) { 
    parent.setLayout(new FillLayout()); 
    ScrolledComposite scrollBox = new ScrolledComposite(parent, SWT.V_SCROLL); 
    scrollBox.setExpandHorizontal(true); 
    mParent = new Composite(scrollBox, SWT.NONE); 
    scrollBox.setContent(mParent); 
    FormLayout layout = new FormLayout(); 
    mParent.setLayout(layout); 
    // Adds a bunch of controls here 
    mParent.layout(); 
    mParent.setSize(mParent.computeSize(SWT.DEFAULT, SWT.DEFAULT, true)); 
} 

... लेकिन यह क्लिप पिछले बटन: alt text

bigbrother82: यह काम नहीं किया।

एससीडीएफ: मैंने आपके सुझाव की कोशिश की, और अब स्क्रॉलबार चले गए हैं। मुझे उस पर कुछ और काम करने की ज़रूरत है।

+0

अरे जेरेमी, मैंने केवल अभी देखा है कि मेरा सुझाव काम नहीं करता है। क्या आपके पास इसके साथ कोई भाग्य है? – SCdF

+0

(बीटीडब्ल्यू, अगर आप मेरे उत्तर पर टिप्पणी करते हैं तो यह मेरे जवाबों में दिखाई देगा और मैं इसे याद नहीं करूंगा) – SCdF

उत्तर

12

ScrolledComposite का उपयोग करते समय यह एक आम बाधा है। जब यह इतना छोटा हो जाता है कि स्क्रॉल बार दिखाया जाना चाहिए, तो स्क्रॉल बार के लिए कमरे बनाने के लिए क्लाइंट नियंत्रण को क्षैतिज रूप से कम करना पड़ता है। इसका कुछ लेबल रैप लाइन बनाने का दुष्प्रभाव होता है, जिसने निम्नलिखित नियंत्रणों को आगे बढ़ाया, जिससे सामग्री समग्र द्वारा आवश्यक न्यूनतम ऊंचाई में वृद्धि हुई।

आपको सामग्री समग्र (mParent) पर चौड़ाई में बदलाव की आवश्यकता है, नई सामग्री चौड़ाई के बाद न्यूनतम ऊंचाई की गणना करें, और नई ऊंचाई के साथ स्क्रॉल किए गए समग्र पर setMinHeight() पर कॉल करें।

public void createPartControl(Composite parent) { 
    parent.setLayout(new FillLayout()); 
    ScrolledComposite scrollBox = new ScrolledComposite(parent, SWT.V_SCROLL); 
    scrollBox.setExpandHorizontal(true); 
    scrollBox.setExpandVertical(true); 

    // Using 0 here ensures the horizontal scroll bar will never appear. If 
    // you want the horizontal bar to appear at some threshold (say 100 
    // pixels) then send that value instead. 
    scrollBox.setMinWidth(0); 

    mParent = new Composite(scrollBox, SWT.NONE); 

    FormLayout layout = new FormLayout(); 
    mParent.setLayout(layout); 

    // Adds a bunch of controls here 

    mParent.addListener(SWT.Resize, new Listener() { 
    int width = -1; 
    public void handleEvent(Event e) { 
     int newWidth = mParent.getSize().x; 
     if (newWidth != width) { 
     scrollBox.setMinHeight(mParent.computeSize(newWidth, SWT.DEFAULT).y); 
     width = newWidth; 
     } 
    } 
    } 

    // Wait until here to set content pane. This way the resize listener will 
    // fire when the scrolled composite first resizes mParent, which in turn 
    // computes the minimum height and calls setMinHeight() 
    scrollBox.setContent(mParent); 
} 

आकार परिवर्तनों को सुनने में, ध्यान दें कि हम किसी भी आकार बदलने वाली घटनाओं को अनदेखा करते हैं जहां चौड़ाई वही रहता है। ऐसा इसलिए है क्योंकि सामग्री की ऊंचाई में परिवर्तन सामग्री की ऊंचाई की ऊंचाई को प्रभावित नहीं करते हैं, जब तक कि चौड़ाई समान हो।

+0

धन्यवाद, इसने समस्या हल की। – Jeremy

0

क्या आपको लेआउट के बाद स्क्रॉलबॉक्स के आकार को पुन: सम्मिलित करने की आवश्यकता नहीं है?

2

मैं गलत नहीं कर रहा हूँ, तो आपके द्वारा बदले जाने की जरूरत है

mParent.layout(); 

और

mParent.setSize(mParent.computeSize(SWT.DEFAULT, SWT.DEFAULT, true)); 

ताकि आप:

public void createPartControl(Composite parent) { 
    parent.setLayout(new FillLayout()); 
    ScrolledComposite scrollBox = new ScrolledComposite(parent, SWT.V_SCROLL); 
    scrollBox.setExpandHorizontal(true); 
    mParent = new Composite(scrollBox, SWT.NONE); 
    scrollBox.setContent(mParent); 
    FormLayout layout = new FormLayout(); 
    mParent.setLayout(layout); 
    // Adds a bunch of controls here 
    mParent.setSize(mParent.computeSize(SWT.DEFAULT, SWT.DEFAULT, true)); 
    mParent.layout(); 
} 
0

पर .setMinWidth और .setMinHeight सेट करने का प्रयास एक बार लेआउट किया गया है, इसे मुख्य समग्र के आकार को पारित करने के बाद स्क्रॉल किया गया।