SWT当中的GridLayout是一个非常灵活的控件,但是在使用起来需要在控制上下一番功夫.
大家都知道,JAVA在写编写窗口程序的时候,物件的添加,放置 操作起来要比.net费劲的多,但是如果用好了相关org.eclipse.layout.*包当中的相关类,也会写出十分漂亮的界面程序.
下面大家先看一个程序:
源码如下:
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();
}
}
这其中我们在使用的时候应该要注意以下几点:
1.要选择自己适合 的Layout类型.GridLayout适合于多种情况,它大部分情况是使用在较为复杂的界面编程当中,因为复杂的界面会有相当多的控件.
2.GridData的使用将是一个控制界面显示的主要类.通过使用GridData我们可以很好的控制界面.
其中GridData的构造函数比较多,但是相关的使用我们都应该熟悉,特别是上面源程序当中使用的那个构造函数,在使用起来更容易控制GridLayout的布局.通过horizantalSpan,VerticalSpan来控制控件所占用的单元格,这样就会控制其它控制是否在一列当中显示还是在几列当中显示.前提是通过GridLayout.numColumns来设置列数.
3.如果不设置GridData那么相关的控件都会按照相关的建立顺序加入到GridLayout当中.GridData不能控制控件的显示顺序,而相关顺序是对象的建立顺序来控制的.这一点不要与GridData混淆了.
希望写这篇文章对大家学习SWT有用.