2013-06-19 5 views
8

मैं एक खोल में ग्रिड लेआउट का उपयोग कर रहा हूं। मैं विगेट्स के स्थान को नियंत्रित करना चाहता हूं। जैसा कि आप देख सकते हैं कि नीचे बटन पंक्ति 4 पर होना चाहिए। मैं विंडोबिल्डर प्लगइन का उपयोग कर रहा हूं और यह उन्हें वांछित स्थानों में रख सकता है।ग्रिड लेआउट में विजेट के पंक्तियों और स्तंभों को कैसे सेट करें?

my shell using windowbuilder

समस्या मैं स्रोत कोड में नियुक्ति के निर्देश को नहीं देख सकता है। मैं उन्हें प्रोग्रामेटिक तरीके से कैसे रख सकता हूं। स्रोत कोड विंडो निर्माता उत्पन्न करता है।

package dgsj.Chapter04.examples.ch4; 

import org.eclipse.swt.widgets.*; 

public class GridLayout2x2 { 
    private static GridData data_1; 
    private static GridData data_2; 

    public static void main(String[] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setMinimumSize(new Point(123, 30)); 
     shell.setSize(126, 123); 
     GridLayout layout = new GridLayout(); 
     layout.numColumns = 3; 
     shell.setLayout(layout); 

     GridData data = new GridData(GridData.FILL_BOTH); 
     data.grabExcessHorizontalSpace = false; 
     data.widthHint = 200; 
     data.grabExcessVerticalSpace = false; 
     Button one = new Button(shell, SWT.PUSH); 
     one.setText("one"); 
     one.setLayoutData(data); 

     data = new GridData(GridData.FILL_BOTH); 
     Button two = new Button(shell, SWT.PUSH); 
     two.setText("two"); 
     two.setLayoutData(data); 
     new Label(shell, SWT.NONE); 
     new Label(shell, SWT.NONE); 

     data_2 = new GridData(GridData.FILL_BOTH); 
     Button four = new Button(shell, SWT.PUSH); 
     four.setText("four"); 
     four.setLayoutData(data_2); 
     new Label(shell, SWT.NONE); 
     new Label(shell, SWT.NONE); 
     new Label(shell, SWT.NONE); 

     new Label(shell, SWT.NONE); 
     new Label(shell, SWT.NONE); 

     Button btnNewButton = new Button(shell, SWT.NONE); 
     btnNewButton.setText("New Button"); 

     data_1 = new GridData(GridData.FILL_BOTH); 
     data_1.grabExcessVerticalSpace = false; 
     data_1.grabExcessHorizontalSpace = false; 
     Button three = new Button(shell, SWT.PUSH); 

     three.setText("three"); 
     three.setLayoutData(data_1); 

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

खाली कि ग्रिड किसी अन्य जानकारी के घर में माना की "सेल" कर रहे हैं:

यहाँ कुछ कोड है कि अपने लेआउट reproduces है? –

+0

कुछ विचारों में वे पूरी तरह खाली हैं और उनका एकल उद्देश्य लेआउट समायोजित करना है। कुछ अन्य विचारों में एक सत्यापन लेबल है जो कुछ त्रुटि दिखाने के लिए दिखाई देता है। –

उत्तर

10

एक ही रास्ता GridLayout में कुछ कोशिकाओं "छोड़" करने के लिए उन्हें खाली नियंत्रण के साथ भरने के लिए है, और उस WindowBuilder उन new Label(shell, SWT.NONE); लाइनों के साथ क्या करता है। यदि आप प्रोग्रामिंग के अनुसार दिए गए लाइन/कॉलम पर नियंत्रण रखना चाहते हैं, तो आपको जोड़ने के लिए खाली Label एस (या अन्य अदृश्य नियंत्रण) की आवश्यक संख्या गिननी होगी।

+0

आप पूरी तरह से सही हैं। धन्यवाद –

3

आप FormLayout का बेहतर उपयोग करेंगे, जो GridLayout से अधिक लचीला है। यदि आपको इसकी आवश्यकता है, तो आप विजेट FormData प्राप्त कर सकते हैं, इसकी सेटिंग्स बदल सकते हैं और फिर रनटाइम पर विजेट को पुनर्स्थापित करने के लिए फिर से लेआउट को मजबूर कर सकते हैं।

ग्रहण SWT Layout दृश्य आपके लिए बहुत मददगार हो सकता है।

import org.eclipse.swt.*; 
import org.eclipse.swt.layout.*; 
import org.eclipse.swt.widgets.*; 

public class MyLayout { 
    public static void main (String [] args) { 
     Display display = new Display(); 
     Shell shell = new Shell (display); 
     FormLayout formLayout = new FormLayout(); 
     shell.setLayout (formLayout); 

     Button button0 = new Button (shell, SWT.PUSH); 
     button0.setText ("button0"); 
     FormData data = new FormData(); 
     data.left = new FormAttachment (0, 0); 
     data.right = new FormAttachment (button1, 0, SWT.DEFAULT); 
     button0.setLayoutData (data); 

     Button button1 = new Button (shell, SWT.PUSH); 
     button1.setText ("button1"); 
     data = new FormData(); 
     data.left = new FormAttachment (button3, 0, SWT.LEFT); 
     data.right = new FormAttachment (button3, 0, SWT.RIGHT); 
     button1.setLayoutData (data); 

     Button button2 = new Button (shell, SWT.PUSH); 
     button2.setText ("button2"); 
     data = new FormData(); 
     data.left = new FormAttachment (button3, 0, SWT.LEFT); 
     data.right = new FormAttachment (button3, 0, SWT.RIGHT); 
     data.top = new FormAttachment (button1, 0, SWT.DEFAULT); 
     button2.setLayoutData (data); 

     Button button3 = new Button (shell, SWT.PUSH); 
     button3.setText ("button3"); 
     data = new FormData(); 
     data.right = new FormAttachment (button4, 0, SWT.DEFAULT); 
     data.bottom = new FormAttachment (100, 0); 
     button3.setLayoutData (data); 

     Button button4 = new Button (shell, SWT.PUSH); 
     button4.setText ("button4"); 
     data = new FormData(); 
     data.right = new FormAttachment (100, 0); 
     data.bottom = new FormAttachment (100, 0); 
     button4.setLayoutData (data); 

     shell.pack(); 
     shell.open(); 

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

     display.dispose(); 
    } 
} 
+2

धन्यवाद लेकिन समस्या यह है कि हम एक उपकरण लिख रहे हैं और हमारे उपयोगकर्ता वे हैं जो हमारे द्वारा विकसित किए जा रहे टूल के साथ फॉर्म बनाते हैं। दुर्भाग्यवश फॉर्म लेआउट का उपयोग करना उनके लिए बहुत जटिल होगा। तो मुझे लगता है कि मैं ग्रिड लेआउट के साथ अटक गया हूँ। –

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