你可以使用控件的setLocation来设置,也可以使用FormAttachment提供的偏移量去达到同样的效果。
FormData data = new FormData();
data.left = new FormAttachment(0, 20);
data.top = new FormAttachment(0, 40);
button.setLayoutData(data);
上面的代码相当于setLocation(20, 40),即将按钮设置的位置设置成(20, 40)。
根据其它控件的调整位置
一般在窗体上都有不只一个控件,这些控件之间都是有一定关系的,它们的位置也是相对的。因此,FormLayout为我们提供了根据其它控件设置当控件位置的方法。如根据另外一个控件设置当前控件左边或右边的位置。
下面的例子将根据一个按钮的位置设置另外一个按钮的位置。有两个按钮,第二个按钮根据第一个按钮的底边设置自己的位置。
Button button1 = new Button(shell, SWT.PUSH);
button1.setText("按钮1");
FormData data1 = new FormData();
data1.top = new FormAttachment(20);
data1.left = new FormAttachment(40);
data1.right = new FormAttachment(50);
button1.setLayoutData(data1);
// 第二个按钮
Button button2 = new Button(shell, SWT.PUSH);
button2.setText("按钮2");
FormData data2 = new FormData();
data2.left = new FormAttachment(button1, 0, SWT.CENTER);
data2.top = new FormAttachment(button1);
button2.setLayoutData(data2);
上面的"按钮2"将根据"按钮1"将自己水平方向的位置设置成"按钮1"的中心位置。
组织SWT/JFace控件的利器:Layout(5)
时间:2010-04-15 天极
StackLayout
我们在最后一部分来讨论StackLayout,并不是因为StackLayout在这5种布局中最复杂,而是这个布局并不在org.eclipse.swt.layout中,而在org.eclipse.swt.custom中。从这个布局的名子可看出,它是将许多SWT控件放到一个集合中,这些控件有同样的尺寸和位置。但只有在最上面的控件才能被显示。
StackLayout只有一个空的构造函数,它只有一个属性topControl,这个属必确定了哪一个控件可以被显示。这个属性默认值是null,也就是说,如果不设置它,那将没有控件被显示在窗体上。但要注意的是,设置topControl并不会将StackLayout中控件删除。
package layout;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.SWT;
public class TestStackLayout
{
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
StackLayout layout = new StackLayout();
shell.setLayout(layout);
StackLayoutSelectionAdapter adapter = new StackLayoutSelectionAdapter(shell, layout);
Button one = new Button(shell, SWT.PUSH);
one.setText("按钮1");
one.addSelectionListener(adapter);
Button two = new Button(shell, SWT.PUSH);
two.setText("按钮2");
two.addSelectionListener(adapter);
Button three = new Button(shell, SWT.PUSH);
three.setText("按钮3");
three.addSelectionListener(adapter);
layout.topControl = one;
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
}
class StackLayoutSelectionAdapter extends SelectionAdapter
{
Shell shell;
StackLayout layout;
public StackLayoutSelectionAdapter(Shell
|