2009-06-07 12 views
5

मैं SWT का उपयोग कर अपने अनुप्रयोगों में से एक के लिए एक मास्टर-विस्तार लेआउट बनाना चाहता हूं।एसडब्ल्यूटी: स्क्रॉल किए गए कॉम्पोजिट के साथ नेस्टेड लेआउट उपलब्ध स्थान से अधिक

कंटेनर, सामग्री, साइडबार और भाग 1 समग्र उदाहरण हैं।

+--Container-------------------------------------+ 
|+--Content----------------------++--Sidebar----+| 
||        ||+--Part1----+|| 
||        |||   ||| 
||        |||   ||| 
||        |||   ||| 
||        |||   ||| 
||        |||   ||| 
||        ||+-----------+|| 
||        ||+--Scrolled-+|| 
||        |||   ||| 
||        |||   ||| 
||        |||   ||| 
||        |||   ||| 
||        |||   ||| 
||        ||+-----------+|| 
|+-------------------------------++-------------+| 
+------------------------------------------------+ 

सामग्री सभी जगह क्षैतिज हड़पने चाहिए और खड़ी है कि उपलब्ध है: स्क्रॉल एक ScrolledComposite

इच्छित लेआउट की तरह कुछ है।

साइडबार मूल रूप से भाग 1 और स्क्रॉल के लिए एक कंटेनर है जो बराबर ऊंचाई का होना चाहिए।

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

मैं अब निम्नलिखित तरीके से इस को लागू किया है:

  • कंटेनर 2 colums के साथ एक GridLayout है।

  • इसके अंदर सामग्री FILL_BOTH व्यवहार है और सभी हॉरिज़ोनल/वर्टिकल स्पेस भी पकड़ती है।

  • साइडबार में एक FillLayout (SWT.VERTICAL) है और इसमें भाग 1 और स्क्रॉल किए गए बच्चे हैं।

समस्या: जब में स्क्रॉल समग्र मदों की एक बहुत डाल और लेआउट बस उपलब्ध स्थान overflows और कोई स्क्रॉल उपलब्ध है, जहां यह होना चाहिए।

जब मैं कंटेनर के लिए फ़िललाउट (SWT.HORIZONTAL) का उपयोग करता हूं तो व्यवहार वांछित होता है, क्योंकि वहां स्क्रोलिंग होती है और सबकुछ "अंदर की सीमाओं" होता है।

क्या ग्रिडलाउट का उपयोग करते समय भी इस व्यवहार को प्राप्त करने का कोई तरीका है क्योंकि मैं सामग्री को अधिकांश जगह लेना चाहता हूं।

संलग्न वर्तमान परीक्षण SWT टुकड़ा:

public class Scrolled { 
    public static void main(String[] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setLayout(new GridLayout(2,false)); 
     //shell.setLayout(new FillLayout(SWT.HORIZONTAL)); 

     Composite content = new Composite(shell, SWT.BORDER); 
     content.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false)); 

     Composite sidebar = new Composite(shell, SWT.BORDER); 
     sidebar.setLayout(new FillLayout(SWT.VERTICAL)); 
     sidebar.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false)); 

     Composite cc = new Composite(sidebar, SWT.BORDER); 

     ScrolledComposite sc = new ScrolledComposite(sidebar, SWT.BORDER 
       | SWT.V_SCROLL | SWT.H_SCROLL); 
     sc.setLayout(new GridLayout(1,true)); 

     Composite c = new Composite(sc, SWT.NONE); 
     c.setSize(400, 400); 
     c.setLayout(new GridLayout(1, true)); 

     for(int i = 0; i < 1000; i++){ 
      new Button(c, SWT.PUSH).setText("Text"); 
     } 

     sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
     sc.setContent(c); 
     sc.setExpandHorizontal(true); 
     sc.setExpandVertical(true); 
     sc.setAlwaysShowScrollBars(true); 

     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
} 

उत्तर

5

लगता है जैसे मैं समाधान मिल गया।

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

content.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); 

sidebar.setLayoutData(new GridData(SWT.FILL,SWT.FILL,false,true)); 
:

निम्नलिखित कोड में परिवर्तन चाल किया

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