Õ¾ÄÚËÑË÷: ÇëÊäÈëËÑË÷¹Ø¼ü´Ê

µ±Ç°Ò³Ãæ: ¿ª·¢×ÊÁÏÊ×Ò³ ¡ú Eclipse רÌâ ¡ú Eclipse FormsÉè¼ÆƯÁÁUIÖ®²¼¾Ö

Eclipse FormsÉè¼ÆƯÁÁUIÖ®²¼¾Ö

ÕªÒª: formµÄbodyÊDZêÌâÏÂÃæµÄ¿ÉÓÿռ䣬ÒòΪÕâ¸ö¿Õ¼äÊÇÒ»¸öSWT Composite£¬ËüÄÜ×öΪÆäËü×é¼þµÄparent
¡¡¡¡Ôö¼ÓһЩÄÚÈÝ

¡¡¡¡ÏÖÔÚÎÒÃÇÒѾ­ÓÐÒ»¸öviewÄܹ»³É¹¦ÔËÐÐÁË.ÎÒÃÇ¿ÉÒÔÍùÀïÃæÔö¼ÓһЩÄÚÈÝ.Eclipse formsÓÐÒ»¸öbody,ÎÒÃÇ¿ÉÒÔÕâÑù´´½¨ÄÚÈÝ.
public void createPartControl(Composite parent) {

  toolkit = new FormToolkit(parent.getDisplay());

  form = toolkit.createForm(parent);

  form.setText("Hello, Eclipse Forms");

  GridLayout layout = new GridLayout();

  form.getBody().setLayout(layout);

  Hyperlink link = toolkit.createHyperlink(form.getBody(), 

    "Click here.", SWT.WRAP);

  link.addHyperlinkListener(new HyperlinkAdapter() {

   public void linkActivated(HyperlinkEvent e) {

    System.out.println("Link activated!");

   }

  });

 }
¡¡¡¡formµÄbodyÊDZêÌâÏÂÃæµÄ¿ÉÓÿռ䣬ÒòΪÕâ¸ö¿Õ¼äÊÇÒ»¸öSWT Composite£¬ËüÄÜ×öΪÆäËü×é¼þµÄparent¡£ÔÚÉÏÃæµÄ´úÂëÀÎÒÃÇΪbodyÉèÖÃÁËlayout£¬È»ºó´´½¨ÁËÒ»¸ö³¬Á´½Ó¡£³¬Á´½ÓÊÇÓÉEclipse FormsÌṩµÄΪÊý²»¶àµÄ×é¼þÖ®Ò»£¬ÎÒÃÇ¿ÉÒÔΪ³¬Á´½ÓÔö¼Ó¼àÌýÆ÷£¬ÕâÑùÄܹ»ÔÚÓû§µã»÷Ëüʱ×ö³ö·´Ó¦¡£

¡¡¡¡Éý¼¶ºóµÄÊÓͼӦ¸Ã¿´ÆðÀ´ÏóÕâÑù£º



ͼ3£ºÒ»¸öÓг¬Á´½ÓµÄ¼òµ¥form.

¡¡¡¡³¬Á´½Ó×é(Hyperlink Groups)

¡¡¡¡Form tookitÓÐÒ»¸ö"³¬Á´½Ó×é"¶ÔÏó.ÿ¸ö´´½¨³öµÄ³¬Á´½Ó¶¼¼ÓÈëÕâ¸ö×é¶ÔÏóÖÐ.³¬Á´½ÓΪ¶à¸ö½ÇÉ«·þÎñ.ËüÃǶ¨ÒåÁËÕâ¸ö×éÖÐËùÓг¬Á´½ÓÔÚÕý³£¡¢hover¡¢¼¤»î²»Í¬×´Ì¬ÏµÄÑÕÉ«.ËüÃǸù¾ÝС×éÖÐÁ´½Ó²»Í¬µÄ״̬À´¸Ä±äÑÕÉ«.ËüÃǸù¾ÝС×éÖÐÁ´½Ó²»Í¬µÄ״̬À´¸Ä±äÏ»®Ïß·ç¸ñ.

¡¡¡¡µ±ÄãÒª¸Ä±ä³¬Á´½Ó×é¶ÔÏóµÄĬÈÏÉèÖÃʱ,¿ÉÒÔͨ¹ýtoolkitµÄgetHyperlinkGroup()·½·¨À´»ñµÃ³¬Á´½Ó×é¶ÔÏó.

¡¡¡¡´´½¨ÆÕͨ×é¼þ

¡¡¡¡Eclipse FormsµÄÒ»¸öÉè¼ÆÄ¿±ê¾ÍÊÇÈÃÄܹ»Ôڱ༭Æ÷/ÊÓͼÖд´½¨ÆÕͨSWT×é¼þ.ÒòΪformµÄbodyÊÇÒ»¸öÆÕͨcomposite,ÄãÄܹ»ÔÚËüÀïÃæʹÓÃÈκÎlayoutºÍ×é¼þ.µ«ÊÇ,¼Çס"Ô­ÉúµÄ"SWT×é¼þÓÐÒ»¸ö×é¼þ±³¾°.ÎÒÃÇÏÖÔÚͨ¹ýËüÃǵĹ¹Ôì·½·¨´´½¨Ò»Ð©×é¼þ.
  layout.numColumns = 2;

  GridData gd = new GridData();

  gd.horizontalSpan = 2;

  link.setLayoutData(gd);

  Label label = new Label(form.getBody(), SWT.NULL);

  label.setText("Text field label:");

  Text text = new Text(form.getBody(), SWT.BORDER);

  text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

  Button button = new Button(form.getBody(), SWT.CHECK);

  button.setText("An example of a checkbox in a form");

  gd = new GridData();

  gd.horizontalSpan = 2;

  button.setLayoutData(gd);
¡¡¡¡ÏÖÔÚÎÒÃÇʹÓÃÁËÁ½ÁÐ,²¢ÇÒ´´½¨ÁËÒ»¸ö±êÇ©(label),Ò»¸öÎı¾¿ò(text field)ºÍÒ»¸ö¸´Ñ¡¿ò(checkbox).½á¹ûÈçÏ£º


ͼ4£ºÒ»¸öÓµÓÐÖ±½ÓÓÃËüÃǵĹ¹ÔìÆ÷´´½¨³öµÄSWT×é¼þµÄform

¡¡¡¡ÕâÕÅͼƬÔõô»ØÊ£¿ÎÒÃÇ´´½¨µÄ×é¼þµÄ±³¾°Ö±½ÓºÍϵͳ´°¿Ú±³¾°ÏàÆ¥Åä,¶ø²»ÊǺÍformµÄ±³¾°Æ¥Åä.ÁíÍâ,Îı¾¿ò¿´ÆðÀ´»¹ºÃÊÇÒòΪÕâÕŽØͼÊÇÔÚWindows XPϽصÄ.ÔÚÆäËü²Ù×÷ϵͳÉÏ,Ëü»á¿´ÆðÀ´ÊÇÓÐÒ»¸ö3D±ß¿òµÄ¿Õ°×Ìõ.ΪÁ˽â¾öÕâ¸öÎÊÌâ,ÎÒÃÇ»áÓÃtoolkitµÄ¹¤³§·½·¨À´´´½¨ÕâЩ×é¼þ£º
  Label label = toolkit.createLabel(form.getBody(), "Text field label:");

  Text text = toolkit.createText(form.getBody(), "");

  text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

  Button button = toolkit.createButton(form.getBody(), "A checkbox in a form", SWT.CHECK);

  gd = new GridData();

  gd.horizontalSpan = 2;

  button.setLayoutData(gd);
¡¡¡¡Õâ¸öÊÓͼÏÖÔڻῴÀ´¸üºÃЩÁË£º


ͼ5£ºÒ»¸öÓµÓÐÓÃform toolkitµÄ¹¤³§·½·¨´´½¨³öµÄSWT×é¼þµÄform

¡¡¡¡ÓÉform toolkitÌṩµÄ¹¤³§·½·¨ÊÇΪÁË·½±ã¡£ToolkitûÓк¯¸ÇËùÓÐÇé¿ö£¬ÉõÖÁÊÇSWT×é¼þ¼¯ºÏ,¶øÇÒÃ÷ÏÔûÓÐΪÄã¿ÉÄÜÓеÄ×Ô¼º¶¨ÖƵÄ×é¼þÌṩÕâÒ»±ãÀû.µ±ÄãÐèҪʹһ¸öSWT×é¼þÓëformͳһʱ,ÄãÓ¦¸ÃʹÓÃÒ»¸ö·½·¨:FormToolkit.adapt(Control control, boolean trackFocus£¬boolean trackKeyboard).ËùÓеŤ³§·½·¨¸÷×Ô·Ö±ðµ÷ÓÃÁËÕâ¸öÊÊÅä·½·¨¡£

¡¡¡¡´ïµ½"ƽ»¬"µÄÊÓ¾õЧ¹û

¡¡¡¡Ò»¸öÔÚPDE±à¼­Æ÷ÖÐEclipse FormsµÄ¿É¿´³öµÄÊôÐÔÊÇ×é¼þµÄ"ƽ»¬"ÊÓ¾õЧ¹û.ÒÔÇ°ËùÓÐûÓÐ3D±ß¿òµÄ×é¼þÔÚ´°¿ÚÖп´ÆðÀ´²»´í,µ«ÊÇÔڱ༭Æ÷»òÊÓͼÖоͲ»ÐÐ.Õâ¸öÖ§³ÖдÔÚFormToolkitÀàÖÐ.µ«ÊÇ,ÔÚһЩϵͳÉÏËüÊÇͨ¹ýһЩ¶¨ÖÆ´ïµ½µÄ.¾Ù¸öÀý×Ó,¿´Ò»ÏÂÕâÕÅ´ÓPDE±à¼­Æ÷(2.1°æ±¾)ÖеĽØͼ£º



ͼƬ6£ºEclipse 2.1ÖÐEclipse FormsµÄƽ»¬ÊÓ¾õЧ¹û.

¡¡¡¡Ïó±í¸ñ,Îı¾Àà,¸´Ñ¡¿òµÈ,ÊǼÓÉÏÒ»¸öƽ»¬µÄ1¸öÏóËØ¿íµÄ±ß¿ò.ÕâЩ±ß¿ò²»ÊÇÀ´×Ô×é¼þ×Ô¼º(SWT.BORDER·ç¸ñûÓÐÓõ½).ÁíÍâ,Èç¹ûÉèÖÃÒ»ÏÂ,tookit»áΪÿ¸ö×é¼þµÄparentÔö¼ÓÒ»¸öpaint¼àÌýÆ÷,ÔÚpaintʼþ·¢ÉúʱΪ×é¼þ¼ÓÉϱ߿ò.ÒªÏëÕâÑùµÄ»°,ÄãÐèҪΪÄã´´½¨µÄÏóÎı¾,±í¸ñ,Ê÷µÈ×é¼þµÄÿ¸öcompositeµ÷ÓÃpaintBordersFor(parent).ÿ¸öparentÖ»ÐèÒªµ÷ÓÃÒ»´Î·½·¨¾Í×ã¹»ÁË£º²»ÐèҪΪÿ¸ö×é¼þÕâÑùµ÷ÓÃ.

¡¡¡¡Form toolkitÖªµÀÄĸö×é¼þÐèÒªÒ»¸ö¶¨ÖƵı߿ò.µ«ÊÇ,Äã¿ÉÄÜд´½¨ÁËÒ»¸ö²»ÔÚÔ­À´Ãûµ¥ÖеÄ×é¼þ,ËüÒ²ÐèÒªÒ»¸ö±ß¿ò.Äã¿ÉÒÔͨ¹ýÏóÏÂÃæÕâÑùµÄ´úÂë¸øtoolkitÒ»¸öÌáʾ£º
Control myControl = new MyControl(parent);

myControl.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);

// or myControl.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TREE_BORDER);

toolkit.paintBordersFor(parent);
¡¡¡¡Äã¿ÉÒÔÔÚÉÏÃæÕâÕÅͼÖп´³ö,ÏóÊ÷ºÍ±í¸ñÕâÑùµÄ"½á¹¹»¯(structural)"µÄ×é¼þÓкÍÎı¾ÇøÓò²»Í¬µÄ±ß¿ò·ç¸ñ²¢ÇÒÄã¿ÉÒÔÑ¡ÔñºÍÄãµÄ×é¼þÏà·ûºÏµÄÄǸö.×¢ÒâÓÃtoolkitµÄ¹¤³§·½·¨´´½¨³öµÄ×é¼þ²»ÐèÒªÕâÑù×ö.

¡¡¡¡ÒòΪEclipse 3.0ºÍÔÚWindows XPÉÏ,µ±javaw.exe.manifestÎļþÔÚJavaÐéÄâ»úbinÎļþ¼ÐÖÐʱ,ûÓб߿ò²úÉú³öÀ´.(ÕâƪÎÄÕÂÀïÎÒËùÓнØͼ¶¼ÊÇÔÚWindows XPϽصÄ).Õâ¸öÎļþ--Äã¿ÉÒÔÔÚ SWT home pageÉÏÏÂÔØ--¸æËßtoolkitΪ±¾µØ×é¼þʹÓÃXPƤ·ô.ÓÃXPƤ·ô,ÏóÎı¾,±í¸ñºÍÊ÷ÊÇÒѾ­Æ½»¬µÄ²¢ÇÒ²»ÐèÒªÔÙÈ¥µ÷Õû.ΪÁËÈÃÄãµÄ´úÂëÓµÓпÉÒÆÖ²ÐÔ,Äã¿ÉÒÔ×ÜÊǵ÷ÓÃpaintBordersFor(Composite)·½·¨,ÈÃtoolkitÈ¥¸ù¾Ý²»Í¬²Ù×÷ϵͳÀ´¾ö¶¨¸ÃÔõô×ö¡£

¡¡¡¡¶¨ÖƲ¼¾Ö(Custom layouts)

¡¡¡¡Eclipse FormsÔÚSWT layoutµÄ»ù´¡ÉÏÔö¼ÓÁËÁ½¸öеÄlayout£¬ÕâЩlayout¼Ì³ÐÁËSWT Layout»ùÀಢÄܹ»ÔÚÈκÎSWT compositeÉÏʹÓ㬵«ÊÇÒ»°ã¶¼ÊǺÍEclipse FormsÁªºÏʹÓõġ£

¡¡¡¡TableWrapLayout

¡¡¡¡ÏÖÔÚÎÒÃÇÖªµÀÈçºÎÀ´×éºÏÒ»¸öform,ÈÃÎÒÃÇÏȸøÒ»¸öÐüÄî.ÎÒÃÇ»á¸Ä±äÄǸö³¬Á´½ÓÎı¾Ê¹Ëü¼Ó³¤Ò»Ð©£º

link.setText("This is an example of a form that is much longer "+
"and will need to wrap.");

¡¡¡¡ÈÃÎÒÃÇ¿´¿´½á¹û£º


ͼƬ7£ºÒ»¸öʹÓÃGridLayoutµÄform

¡¡¡¡·¢ÉúʲôÊÂÁË£¿¼ÇסÎÒÃÇʹÓõÄÊÇGridLayout£¬µ±ËüÎÊÕâ¸ö³¬Á´½Ó×é¼þÀ´¼ÆËãËü´óСʱ£¬³¬Á´½Ó¸æËßËüÎÄ×ÖÔÚµ¥¶ÀÐÐÀïÐèÒªµÄ³¤¶È£¬ËäÈ»ÎÒÃǸæËß×é¼þÈ¥°ü¹ü(wrap)£¬Ëü²¢Ã»ÓÐÕâÑù×öÒòΪGridLayoutÐèÒª×é¼þ·µ»ØËüµÄ³¤¶È¡£³¬Á¬½Ó×é¼þ--ºÍÆäËüÏóLabelÒ»ÑùµÄSWT×é¼þ£¬¿ÉÒÔͨ¹ýÄã´«µÝËüÊýÖµÀ´¾ö¶¨³¤ºÍ¿í,µ«ÊÇGridLayout²»»áÏò×é¼þ´«µÝÊýÖµ²ÎÊý¡£

¡¡¡¡ÎÒÃÇÐèÒªµÄÊÇÒ»¸öÏóHTML±í¸ñÒ»ÑùµÄlayout.ÎÒÃÇÏ£ÍûÄÚÈÝÈ¥ÊÔͼÅäºÏÌṩµÄ¿Í»§¿Õ¼ä,²¢ÇÒÒ»ÐÐÐеصþ¼Ó.Eclipse FormsÌṩÁËÒ»¸öÕâÑùµÄlayout½ÐTableWrapLayout.GridLayoutºÍTableWrapLayoutÖ®¼äÓÐÐí¶à¹²Í¬µã.¶¼ÊÇÓñí¸ñÀ´×éÖ¯parentµÄchildren.¶¼ÓÐlayout dataÀ´¸æËßlayoutÈçºÎ¶Ô´ýÿ¸ö×é¼þ.¶¼Äܹ»ÔÚÐèÒªÕ¼¾ÝËùÓпռäʱµÈ½ÓÊÜ×é¼þµÄÌáʾ.

¡¡¡¡µ«ÊÇ,ËüÃÇÔÚ²¼¾ÖʱÍêÈ«²»Í¬.TableWrapLayout´ÓÁпªÊ¼.Ëü¼ÆËãÿÁеÄ×îСµÄ,ºÏÊʵÄ,×î´óµÄ¿í¶È²¢ÓÃÕâ¸öÐÅÏ¢À´Õ¼¾Ý¿Õ¼ä.ËüÒ²ÊÔͼ¾¡¿ÉÄܵع«Æ½µØÔÚ¸÷Áмä·Ö¸ô,ÕâÑùÓÐЩ×é¼þ¾ÍûÓжàÓàµÄ¿Õ¼ä.

¡¡¡¡ÈÃÎÒÃÇʹÓÃTableWrapLayoutÀ´ÖØиü¸ÄÀý×Ó(¸ü¸Ä´¦¸ßÁ ÁÏÔʾ)£º
 public void createPartControl(Composite parent) {

  toolkit = new FormToolkit(parent.getDisplay());

  form = toolkit.createForm(parent);

  form.setText("Hello, Eclipse Forms");

  TableWrapLayout layout = new TableWrapLayout();

  form.getBody().setLayout(layout);

  Hyperlink link = toolkit.createHyperlink(form.getBody(),"Click here.", SWT.WRAP);

  link.addHyperlinkListener(new HyperlinkAdapter() {

   public void linkActivated(HyperlinkEvent e) {

    System.out.println("Link activated!");

   }

  });

  link.setText("This is an example of a form that is much longer and will need to wrap.");

  layout.numColumns = 2;

  TableWrapData td = new TableWrapData();

  td.colspan = 2;

  link.setLayoutData(td);

  Label label = toolkit.createLabel(form.getBody(), "Text field label:");

  Text text = toolkit.createText(form.getBody(), "");

  td = new TableWrapData(TableWrapData.FILL_GRAB);

  text.setLayoutData(td);

  Button button = toolkit.createButton(form.getBody(), "A checkbox in a form",

D(["mb","SWT.CHECK);\n  td \u003d new TableWrapData();\n  td.colspan \u003d 2;\n  button.setLayoutData(td);\n }


ÎÒÃÇÓÃÁËGridDataÏàͬµÄ¸ÅÄî.һЩ±äÁ¿ÓµÓв»Í¬µÄÃû×Ö(¾Ù¸öÀý×Ó,colspanºÍrowspan,alignºÍvalignÈ¡×ÔHTML TABLEµÄÊôÐÔ),µ«ÊÇÄã¿ÉÒÔ×öÏàͬµÄÊÂ--´´½¨Ò»¸ö³¬Á´½ÓºÍ°´Å¥Õ¼¾ÝÁ½Áеĸñ×Ó.ÒòΪ¿Õ°×(margins)ºÍGridLayoutÊÇÏàͬµÄ,½á¹û»á¿´ÆðÀ´Ò»Ñù,³ýÁ˳¬Á´½ÓÏÖÔÚ»á°ü¹üÆðÀ´£º
\n
ͼƬ8£ºÒ»¸öʹÓÃTableWrapLayoutµÄform

\n
TableWrapLayoutºÍGridLayoutµÄÒ»¸öÖ÷ÒªµÄ²»Í¬µãÊÇÄãÓ¦¸Ãֹͣȥ¼ÆËã´¹Ö±µÄ¿Õ¼ä.ÔÚGridLayoutÀï,ÄãÒ»°ã»áÈÃ"²»Ò×±äÐεÄ(rigid)"×é¼þÓÃ×ÔÈ»µÄλÖúʹóС²¢ÈÃ"¿ÉÉìËõµÄ(flexible)"×é¼þÈ¥Õ¼¾Ýˮƽ»ò´¹Ö±µÄ¿Õ¼ä.Ïà·´,TableWrapLayoutÊÇ´ÓÉÏÍùϹ¤×÷µÄ,²¢ÇÒËüÈÝÏÂËùÓеÄ×é¼þ,ËüµÄ¹¤×÷ÊÇÍêÈ«µÄ.Õ¼¾Ýˮƽ¿Õ¼äµÄ¸ÅÄ´æÔÚ(ÏóÉÏÃæչʾһÑù).µ«ÊÇ,´¹Ö±·½ÏòÉÏ,ÄãÖ»ÄÜÔÚµ¥Ôª(cell)±È×é¼þ¸ßʱѡÔñFILLµ¥Ôª,»òÑ¡ÔñTOP,MIDDLE»òBOTTOM´¹Ö±¶ÔÆë.\n
ÄãÒ²Ðí»á×¢Òâµ½Ò»¸öµØ·½ºÍ¸Õ¸Õ˵µÄ²»·û£ºTableWrapLayoutÈÔÈ»ÓÐÒ»¸ögrabVertical±äÁ¿.µ«ÊÇ,ÕâÀïÕâ¸ö±äÁ¿ÔÚÕâÀïÓÐÃ÷È·µÄÄ¿µÄ£ºµ±Ò»¸öÉèÖÃÁ˸߶ȵÄ×é¼þÕ¼¶àÐÐʱ,ËüµÄ¸ß¶È»á¸ø³öÒ»¸öÌõ¼þ¾ÍÊÇ´¹Ö±dimensionÒѾ­ÖªµÀÁË,×é¼þÐèҪȥ³ýËüËùÔڵĶà¸öµ¥ÔªÖ®¼äµÄ¶àÓà¿Õ¼ä.
\n
ΪÁËÓÃTableWrapLayoutÓкõĽá¹û,È·¶¨×é¼þ¿ÉÒÔ½Ó½ü·ç¸ñ(SWT.WRAP).Eclipse FromsÌṩµÄ×éºÏ¶¨ÖÆ×é¼þÄܹ»ÔÚboxÍâÃæ°ü¹ü.ÕâÊÇͨ¹ýʵÏÖILayoutExtension½Ó¿ÚʵÏֵģº
public interface ILayoutExtension {
/**
* Computes the minimum width of the parent. All widgets capable of word\n
* wrapping should return the width of the longest word that cannot be
* broken any further.
*
* @param parent the parent composite
* @param changed true if the cached information should be\n
* flushed, false otherwise.
* @return the minimum width of the parent composite
*/
public int computeMinimumWidth(Composite parent, boolean changed);
\n
/**
* Computes the maximum width of the parent. All widgets capable of word
* wrapping should return the length of the entire text with wrapping
* turned off.
*
* @param parent the parent composite\n
* @param changed true if the cached information
* should be flushed, false otherwise.",1] ); //SWT.CHECK); td = new TableWrapData(); td.colspan = 2; button.setLayoutData(td); }
¡¡¡¡ÎÒÃÇÓÃÁËGridDataÏàͬµÄ¸ÅÄî.һЩ±äÁ¿ÓµÓв»Í¬µÄÃû×Ö(¾Ù¸öÀý×Ó,colspanºÍrowspan,alignºÍvalignÈ¡×ÔHTML TABLEµÄÊôÐÔ),µ«ÊÇÄã¿ÉÒÔ×öÏàͬµÄÊÂ--´´½¨Ò»¸ö³¬Á´½ÓºÍ°´Å¥Õ¼¾ÝÁ½Áеĸñ×Ó.ÒòΪ¿Õ°×(margins)ºÍGridLayoutÊÇÏàͬµÄ,½á¹û»á¿´ÆðÀ´Ò»Ñù,³ýÁ˳¬Á´½ÓÏÖÔÚ»á°ü¹üÆðÀ´£º


ͼƬ8£ºÒ»¸öʹÓÃTableWrapLayoutµÄform
¡¡¡¡TableWrapLayoutºÍGridLayoutµÄÒ»¸öÖ÷ÒªµÄ²»Í¬µãÊÇÄãÓ¦¸Ãֹͣȥ¼ÆËã´¹Ö±µÄ¿Õ¼ä.ÔÚGridLayoutÀï,ÄãÒ»°ã»áÈÃ"²»Ò×±äÐεÄ(rigid)"×é¼þÓÃ×ÔÈ»µÄλÖúʹóС²¢ÈÃ"¿ÉÉìËõµÄ(flexible)"×é¼þÈ¥Õ¼¾Ýˮƽ»ò´¹Ö±µÄ¿Õ¼ä.Ïà·´,TableWrapLayoutÊÇ´ÓÉÏÍùϹ¤×÷µÄ,²¢ÇÒËüÈÝÏÂËùÓеÄ×é¼þ,ËüµÄ¹¤×÷ÊÇÍêÈ«µÄ.Õ¼¾Ýˮƽ¿Õ¼äµÄ¸ÅÄ´æÔÚ(ÏóÉÏÃæչʾһÑù).µ«ÊÇ,´¹Ö±·½ÏòÉÏ,ÄãÖ»ÄÜÔÚµ¥Ôª(cell)±È×é¼þ¸ßʱѡÔñFILLµ¥Ôª,»òÑ¡ÔñTOP,MIDDLE»òBOTTOM´¹Ö±¶ÔÆë.

¡¡¡¡ÄãÒ²Ðí»á×¢Òâµ½Ò»¸öµØ·½ºÍ¸Õ¸Õ˵µÄ²»·û£ºTableWrapLayoutÈÔÈ»ÓÐÒ»¸ögrabVertical±äÁ¿.µ«ÊÇ,ÕâÀïÕâ¸ö±äÁ¿ÔÚÕâÀïÓÐÃ÷È·µÄÄ¿µÄ£ºµ±Ò»¸öÉèÖÃÁ˸߶ȵÄ×é¼þÕ¼¶àÐÐʱ,ËüµÄ¸ß¶È»á¸ø³öÒ»¸öÌõ¼þ¾ÍÊÇ´¹Ö±dimensionÒѾ­ÖªµÀÁË,×é¼þÐèҪȥ³ýËüËùÔڵĶà¸öµ¥ÔªÖ®¼äµÄ¶àÓà¿Õ¼ä.

¡¡¡¡ÎªÁËÓÃTableWrapLayoutÓкõĽá¹û,È·¶¨×é¼þ¿ÉÒÔ½Ó½ü·ç¸ñ(SWT.WRAP).Eclipse FromsÌṩµÄ×éºÏ¶¨ÖÆ×é¼þÄܹ»ÔÚboxÍâÃæ°ü¹ü.ÕâÊÇͨ¹ýʵÏÖILayoutExtension½Ó¿ÚʵÏֵģº

public interface ILayoutExtension {
/**
* Computes the minimum width of the parent. All widgets capable of word
* wrapping should return the width of the longest word that cannot be
* broken any further.
*
* @param parent the parent composite
* @param changed true if the cached information should be
* flushed, false otherwise.
* @return the minimum width of the parent composite
*/
public int computeMinimumWidth(Composite parent, boolean changed);

/**
* Computes the maximum width of the parent. All widgets capable of word
* wrapping should return the length of the entire text with wrapping
* turned off.
*
* @param parent the parent composite
* @param changed true if the cached information
* should be flushed, false otherwise.
* @return the maximum width of the parent composite
*/
public int computeMaximumWidth(Composite parent, boolean changed);
}

¡¡¡¡TableWrapLayout±¾ÉíʵÏÖÁËÕâ¸ö½Ó¿Ú,ÕâÑùÈÃËü´¦Àíµ±compositesµÄlayoutÊÇÕâ¸öcompositeµÄparentµ ÄchildrenµÄÇé¿ö.ÁíÍâµÄÁ½¸ö·½·¨Äܹ»¼ÆËãÁ½ÖÖ¼«¶ËÇé¿ö--µ±ËùÓÐ×é¼þ¾¡¿ÉÄÜ¿íµØ²¼ÂúʱµÄÏÔÈ»µÄ×îС¿í¶ÈºÍ×î´ó¿í¶È.Á½ÕߵIJ»Í¬ÊÇʹÁÐÖ®¼äµÄ¶àÓà¿Õ¼ä¾¡¿ÉÄÜСʱ¹±Ï׳ö¹«Æ½µÄ¿Õ¼ä.

¡¡¡¡ÈÃÎÒÃÇ¿´Çå³þ¹±Ï׿ռäÊÇÔõÑùµÄ.ÎÒÃÇ»áÍƼöÎÒÃǵ½ÏÖÔÚΪֹдµÄ´úÂë²¢ÏóÏÂÃæÕâÑù×ö³öÐ޸ģº
 layout.numColumns = 3;

 Label label;

 TableWrapData td;

 

 label = toolkit.createLabel(form.getBody(), 

  "Some text to put in the first column", SWT.WRAP);

 label = toolkit.createLabel(form.getBody(),

  "Some text to put in the second column and make it a bit "+

  "longer so that we can see what happens with column "+

  distribution. This text must be the longest so that it can "+

  "get more space allocated to the columns it belongs to.", 

  SWT.WRAP);

 td = new TableWrapData();

 td.colspan = 2;

 label.setLayoutData(td);

 label = toolkit.createLabel(form.getBody(), 

  "This text will span two rows and should not grow the column.", 

  SWT.WRAP);

 td = new TableWrapData();

 td.rowspan = 2;

 label.setLayoutData(td);

 label = toolkit.createLabel(form.getBody(), 

  "This text goes into column 2 and consumes only one cell", 

  SWT.WRAP);

 label.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));

 label = toolkit.createLabel(form.getBody(), 

  "This text goes into column 3 and consumes only one cell too", 

  SWT.WRAP);

 label.setLayoutData(new TableWrapData(TableWrapData.FILL));

 label = toolkit.createLabel(form.getBody(), 

  "This text goes into column 2 and consumes only one cell", 

  SWT.WRAP);

 label.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));

 label = toolkit.createLabel(form.getBody(), 

  "This text goes into column 3 and consumes only one cell too", 

  SWT.WRAP);

 label.setLayoutData(new TableWrapData(TableWrapData.FILL));

 form.getBody().setBackground(form.getBody().getDisplay().

    getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
¡¡¡¡Õâ¸ö´´½¨ÁËһЩÓв»Í¬³¤¶ÈÎı¾µÄlabel.ÓÐЩlabelsÕ¼¾Ý¶àÁÐ,ÓÐЩռ¾Ý¶àÐÐ.ΪÁËÈòâÊÔ¸ü¼Ó¼òµ¥£¬ÎÒÃÇ°ÑformµÄ±³¾°ÉèÖÃΪ×é¼þ±³¾°,ÕâÑùµ¥ÔªÄܹ»¸ü¼òµ¥¿´³öÀ´.µ±ÎÒÃÇÔËÐÐÀý×Ó,ÎÒÃÇ»áµÃµ½ÏÂÃæµÄÑù×Ó£º

ͼƬ9£ºTableWrapLayoutÁôϵĶàÓà¿Õ¼ä
¡¡¡¡¹Ø¼üÖ®´¦ÔÚÓÚ×é¼þ×îС¿í¶ÈºÍ×î´ó¿í¶ÈÏà±È½Ïʱ.Ïà²îÔ½¶à,½á¹ûÔ½Ã÷ÏÔ,»á¿´µ½ÁÐÖÐÓкܴóµÄ·ì϶.Õ¼¾ÝµÄ¿í¶ÈÊÇ×é¼þËùÐèÒªµÄ×îСµÄ¿í¶È.×¢ÒâµÚ3ÁбȵÚ2ÁÐÉÔ΢¿íÒ»µãµã,ÕâÊÇÒòΪµÚ3ÁÐÖеÄÎÄ×Ö³¤¶È±ÈµÚ2ÁÐÖÐÎÄ×ÖÒª³¤µã.Èç¹ûÐèÒªÔĶÁ²¼¾ÖµÄÏà¹ØÀíÂÛ,¿ÉÒÔÈ¥ÕâÀïW3C recommendations for HTML table auto-layout.

¡¡¡¡ColumnLayout

¡¡¡¡Eclipse FormsÁíÍâÒ»¸ö¶¨ÖƵÄlayoutÊÇSWT RowLayoutµÄ±äÖÖ.Èç¹ûÎÒÃÇ°ÑRowLayoutÉϵÄchildren´¹Ö±·ÅÖÃʱ--°´ÁÐ-²¢ÇÒʹͬÁÐÖеÄËùÓÐ×é¼þÓµÓÐÏàͬµÄ¿í¶È,ÎÒÃÇ»áÓÉ×é¼þµÄ¿í¶ÈµÃµ½¶à¸öÁÐ.µ«ÊÇ,×îºóÒ»ÁÐÏÔÈ»²»ÊDZ»ÌîÂúµÄ--ÕâÓÉ×é¼þµÄ¸öÊý¾ö¶¨.Èç¹ûÔÚformÖÐ,ÎÒÃÇ»áÈÔÈ»¿´µ½ËùÓÐ×é¼þÔÚÒ»ÁÐÖÐ,ÒòΪRowLayout²»Äܹ»"´¹Ö±" °ü¹ü.Èç¹ûÎÒÃÇÓÃGridLayoutÏàÌæ´úµÄ»°,ÁеÄÊýÁ¿ÓÉÎÒÃÇ×Ô¼º¾ö¶¨.

¡¡¡¡ÔÚ¸ü¼Ó¸´ÔÓµÄformsÖÐÎÒÃÇÐèÒªÁеÄÊýÁ¿°´Çé¿ö±ä»¯.»»¾ä»°À´Ëµ,ÎÒÃÇÏ£ÍûÊý×Ö°´ÕÕformµÄ¿í¶ÈÀ´¸Ä±ä--ÓпÉÄÜÐèÒª¸ü¶àµÄÁÐ,µ±¿í¶È¼õСʱÔò°ÑÊý×Ö¼õС.¶øÇÒÎÒÃÇÏ£ÍûËùÓÐÁеij¤¶ÈÏó±¨Ö½²¼¾ÖÒ»ÑùÏàͬ.ÕâЩҪÇó¶¼Äܹ»Í¨¹ýColumnLayoutÀ´´ïµ½.

¡¡¡¡ÓëTableWrapLayoutÏà±È,ColumnLayout¸ü¼Ó¼òµ¥.²»ÐèÒª¸´ÔÓµÄÉèÖÃ.ΨһÐèÒªÄãÉèÖõľÍÊÇÁÐÊýµÄ·¶Î§,ĬÈÏÊÇ1µ½3.ÏÂÃæµÄÀý×ÓÑÝʾÁËÒ»¸öʹÓÃColumnLayoutµÄÓÐÐí¶à¶ÎÂä(sections)µÄform.³õʼʱ,Ö»ÐèÒªÁ½ÁоͿÉÒÔ·ÅÖÃËùÓжÎÂäÁË.Èç¹ûÎÒÃǰѱ༭Æ÷±äÕ­Ò»µã,layout»áʹËüÃÇÔÚͬһÁÐÖÐ.





ͼƬ10£ºÊ¹ÓÃColumnLayoutµÄËùÓа´ÁÐÅÅÁеĶÎÂä.layout¿ªÊ¼ÊÇÁ½ÁÐ,µ«ÊÇ°´ÕÕ¿Õ¼äµÄ¸Ä±ä±ä³ÉÁËÒ»ÁÐ.




¡ü·µ»ØĿ¼
ǰһƪ: Eclipse FormsÉè¼ÆƯÁÁUIÖ®¸ß¼¶×é¼þ
ºóһƪ: Eclipse¿ìËÙÉÏÊÖHibernateÖ®ÈëÃÅʵÀý