2010-11-27 22 views
6

मेरी विंडो को दो अलग-अलग प्रकार के लेआउट की अनुमति देनी चाहिए (यह बेहतर वर्णन करने के लिए यह एक सरल उदाहरण है), उदा।एसडब्ल्यूटी के साथ घटकों के अभिभावक को कैसे बदला जाए?

+-------------+-------------+-------------+ 
| Component 1 | Component 2 | Component 3 | 
|    |    |    | 
|    |    |    | 
|    |    |    | 
|    |    |    | 
+-------------+-------------+-------------+ 

और

+-------------+---------------------------+ 
| Component 1 | Component 2    | 
|    |       | 
|    +---------------------------+ 
|    | Component 3    | 
|    |       | 
+-------------+---------------------------+ 

जहां उपयोगकर्ता दोनों के बीच स्विच कर सकते हैं, उदाहरण के लिए, एक मेनू आइटम का उपयोग कर।

एसडब्ल्यूटी के साथ आपको घटक बनाने के दौरान माता-पिता को प्रदान करने की आवश्यकता है। लेकिन हमें (1) घटक का पुन: उपयोग करने की आवश्यकता होगी और (2) उन्हें एक अलग माता-पिता (डॉकिंग ढांचे के समान) में रखें। एसडब्ल्यूटी के साथ यह कैसे संभव है?

उत्तर

7

आप इसे घटक के माता-पिता को बदलकर बस ऐसा कर सकते हैं।

setParent() नियंत्रण के माता-पिता, को बदलता है यदि अंतर्निहित ऑपरेटिंग सिस्टम का समर्थन करता है। फिर आप layout() समग्र बना सकते हैं ताकि परिवर्तन प्रकट हो जाएं।

  • एक समग्र c1 युक्त ऊर्ध्वाधर नियंत्रण
  • एक समग्र c2 युक्त क्षैतिज नियंत्रण
  • एक लेबल lbl
  • एक बटन btn

यहाँ:

आप तीन नियंत्रण है कहो कोड:

public class ControlSwitcher { 
    public static void main(String[] args) { 
     Display display = new Display(); 
     final Shell shell = new Shell(display); 
     GridLayout gl = new GridLayout(); 
     gl.marginWidth = gl.marginHeight = 20; 
     shell.setLayout(gl); 

     final Composite c1 = new Composite(shell, SWT.NONE); 
     c1.setBackground(new Color(display, 255, 160, 160)); 
     RowLayout layout = new RowLayout(SWT.VERTICAL); 
     c1.setLayout(layout); 

     final Composite c2 = new Composite(c1, SWT.NONE); 
     c2.setBackground(new Color(display, 160, 255, 160)); 
     c2.setLayout(new RowLayout()); 

     final Label lbl = new Label(c2, SWT.NORMAL); 
     lbl.setText("Hello world"); 

     final Button btn = new Button(c2, SWT.PUSH); 
     btn.setText("Switch"); 
     btn.addSelectionListener(new SelectionListener() { 
      @Override 
      public void widgetSelected(SelectionEvent arg0) { 
       Composite target; 
       if (btn.getParent().equals(c2)) { 
        target = c1; 
       } else { 
        target = c2; 
       } 
       boolean success = btn.setParent(target); 
       if (success) { 
        target.pack(); 
        shell.pack(); 
       } else { 
        throw new RuntimeException("Not supported by this platform"); 
       } 
      } 

      @Override 
      public void widgetDefaultSelected(SelectionEvent arg0) { 
      } 
     }); 

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

क्या आप जानते हैं कि माता-पिता को सेटिंग विंडोज, ओएस एक्स और लिनक्स/जीटीके पर समर्थित है या नहीं? – Mot

+0

नहीं; मैंने केवल Vista पर इसका परीक्षण किया है। मैं सोमवार को कार्यालय में आपके लिए यह देख सकता हूं। –

+0

मैंने इसे लिनक्स पर परीक्षण किया है और यह काम करता है (माना जाता है कि जीटीके + स्थापित है, जो उबंटू/कुबंटू/जुबंटू पर डिफ़ॉल्ट है)। –

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