SWT當(dāng)中的GridLayout是一個(gè)非常靈活的控件,但是在使用起來需要在控制上下一番功夫.
大家都知道,JAVA在寫編寫窗口程序的時(shí)候,物件的添加,放置 操作起來要比.net費(fèi)勁的多,但是如果用好了相關(guān)org.eclipse.layout.*包當(dāng)中的相關(guān)類,也會(huì)寫出十分漂亮的界面程序.
下面大家先看一個(gè)程序:
源碼如下:
package com.layout;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.SWT;
public class CopyOfGridLayoutExc {
?
?public static void main(String[] args) {
??Display display = new Display();
???? Shell shell = new Shell(display);
???? shell.setText("Find (GridLayout)");
???? Label label = new Label(shell, SWT.NONE);
???? label.setText("Find what:");
???? Text text = new Text(shell, SWT.BORDER);
???? Button findButton = new Button(shell, SWT.PUSH);
???? findButton.setText("Find Next");
???? Group group = new Group(shell, SWT.NONE);
???? group.setLayout(new RowLayout());
???? Button upButton = new Button(group, SWT.RADIO);
???? upButton.setText("Up");
???? Button downButton = new Button(group, SWT.RADIO);
???? downButton.setText("Down");
???? downButton.setSelection(true);
???? group.setText("Direction");
???? Button cancelButton = new Button(shell, SWT.PUSH);
???? cancelButton.setText("Cancel");
?
???? /* Use a GridLayout to position the controls */
???? Monitor monitor = shell.getMonitor();
???? int width = monitor.getClientArea().width / 10;
???? GridLayout layout = new GridLayout(4, false);
???? layout.marginWidth = layout.marginHeight = 14;//layout leave's the window's space
???? shell.setLayout(layout);
???? GridData labelData =
???????? new GridData(SWT.FILL, SWT.CENTER, false, false);
???? label.setLayoutData(labelData);
???? GridData textData =
???????? new GridData(SWT.FILL,SWT.CENTER,true,false,2,1);
???? textData.widthHint = width;
???? text.setLayoutData(textData);
???? GridData findData =
???????? new GridData(SWT.FILL, SWT.CENTER, false, false);
???? findButton.setLayoutData(findData);
???? GridData groupData =
???????? new GridData(SWT.RIGHT,SWT.TOP,false,false,3,1);
???? group.setLayoutData(groupData);
???? GridData cancelData =
???????? new GridData(SWT.FILL, SWT.TOP, false, false);
???? cancelButton.setLayoutData(cancelData);
?
???? shell.pack();
???? shell.open();
???? while (!shell.isDisposed()) {
???????? if (!display.readAndDispatch()) display.sleep();
???? }
???? display.dispose();
?}
}
這其中我們?cè)谑褂玫臅r(shí)候應(yīng)該要注意以下幾點(diǎn):
1.要選擇自己適合 的Layout類型.GridLayout適合于多種情況,它大部分情況是使用在較為復(fù)雜的界面編程當(dāng)中,因?yàn)閺?fù)雜的界面會(huì)有相當(dāng)多的控件.
2.GridData的使用將是一個(gè)控制界面顯示的主要類.通過使用GridData我們可以很好的控制界面.
?? 其中GridData的構(gòu)造函數(shù)比較多,但是相關(guān)的使用我們都應(yīng)該熟悉,特別是上面源程序當(dāng)中使用的那個(gè)構(gòu)造函數(shù),在使用起來更容易控制GridLayout的布局.通過horizantalSpan,VerticalSpan來控制控件所占用的單元格,這樣就會(huì)控制其它控制是否在一列當(dāng)中顯示還是在幾列當(dāng)中顯示.前提是通過GridLayout.numColumns來設(shè)置列數(shù).
3.如果不設(shè)置GridData那么相關(guān)的控件都會(huì)按照相關(guān)的建立順序加入到GridLayout當(dāng)中.GridData不能控制控件的顯示順序,而相關(guān)順序是對(duì)象的建立順序來控制的.這一點(diǎn)不要與GridData混淆了.
希望寫這篇文章對(duì)大家學(xué)習(xí)SWT有用.