内容发布更新时间 : 2024/12/22 20:10:12星期一 下面是文章的全部内容请认真阅读。
}
Shell shell = new Shell (display); shell.setText(\示例\);
FormLayout formlayout= new FormLayout();
formlayout.marginHeight=10; //设置shell的上、下边缘和组件的距离为10像素 Button b1=new Button(shell,SWT.PUSH); b1.setText(\);
FormData formData1=new FormData(); //创建布局数据对象formData1
formData1.top=new FormAttachment(0,50); //设置组件B1的顶部离父容器
//shell上边缘的距离为50像素
formData1.bottom=new FormAttachment(100,-50);//设置组件B1的底部离shell的下
//边缘的距离为50像素
formData1.left=new FormAttachment(0,50); //设置组件B1的左边离shell的左
//边距离为50像素
formData1.right=new FormAttachment(100,-50); //设置组件B1的右边离shell的右
//边距离为50像素
formData1.width=100; //按钮b1的宽度为100像素 formData1.height=50; //按钮b1的高度为50像素
b1.setLayoutData(formData1); //设置b1的布局数据为formData1 Button b2=new Button(shell,SWT.PUSH); b2.setText(\);
FormData formData2=new FormData(50,30); //创建FormData对象,宽度50,高度30 formData2.left=formAttachment; //B2的左边与shell左边缘的距离为0 formData2.top=formAttachment; //B2的上边与shell上边缘的距离为
//marginHeight设定的值(10像素)
b2.setLayoutData(formData2); //设置b2的布局数据为formData2 shell.setLayout(formlayout); shell.pack();
FormAttachment formAttachment=new FormAttachment();//创建FormAttachment对象
shell.open();
while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } }
display.dispose(); }
图4.32 B1与shell四边的距离相等 图4.33 shell改变后B1与其四边的距离仍相等
例4.17 综合布局示例。
package edu.ch4;
import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.SWT; public class Sample4_17 {
public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setText(\示例\);
FormLayout formlayout = new FormLayout(); //创建表格布局对象 shell.setLayout(formlayout);
Label label=new Label(shell,SWT.BORDER); //在shell中创建Label对象 label.setText(\); FormData data = new FormData();
data.top = new FormAttachment(0, 5); //Label与shell上边框相距5象素 data.left = new FormAttachment(0, 5); // Label与shell左边框相距5象素 data.bottom = new FormAttachment(50, -5);//Label在shell水平中线上方5象素 data.right = new FormAttachment(50, -5); // Label在shell垂直中线左边5象素 label.setLayoutData(data);
Composite composite = new Composite(shell, SWT.NONE);//创建面板 GridLayout gridLayout = new GridLayout(); //创建网格布局对象 gridLayout.marginHeight = 0; gridLayout.marginWidth = 0;
composite.setLayout(gridLayout); //设置面板布局方式为网格布局
Button b1 = new Button(composite, SWT.PUSH); //在composite上创建button B1 b1.setText(\);
GridData gridData = new GridData(GridData.FILL_BOTH); //设置布局方式为双向填充 b1.setLayoutData(gridData);
Button b2 = new Button(composite, SWT.PUSH); //B2设置同B1 b2.setText(\);
gridData = new GridData(GridData.FILL_BOTH); b2.setLayoutData(gridData);
Button b3 = new Button(composite, SWT.PUSH); //B2设置同B1 b3.setText(\);
gridData = new GridData(GridData.FILL_BOTH);
b3.setLayoutData(gridData);
data = new FormData(); //创建FormData对象
data.top = new FormAttachment(0, 5); //设置composite距shell上边框5象素 data.left = new FormAttachment(label, 5);//设置composite距label 5象素
data.bottom = new FormAttachment(50, -5);//设置composite在shell水平中线上方5象素 data.right = new FormAttachment(100, -5);//设置composite在shell右边框的左侧5象素 composite.setLayoutData(data); //设置composite的布局数据 Text text=new Text(shell,SWT.BORDER); //创建Text对象 text.setText(\);
data = new FormData(); //创建表格布局数据
data.top = new FormAttachment(label, 5); //text上方离label 5象素 data.left = new FormAttachment(0, 5); // text左边离shell左边框5象素 data.bottom = new FormAttachment(100, -5); // text下边框离shell下边框5象素 data.right = new FormAttachment(100, -5); // text右边框离shell右边框5象素 text.setLayoutData(data); //设置text的布局数据 shell.pack(); shell.open();
while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } }
display.dispose(); } }
运行结果如图4.34所示。当窗体shell大小改变时,各组件的相对位置保持不变。如图4.35所示。
图4.34 综合实例 图4.35 窗体变化时
4.5 SWT的事件处理
SWT的事件模型和Java标准的AWT基本相同。事件产生处的SWT组件称为事件源,对事件作出具体动作称为监听器(Listener)。监听器负责监听组件上的事件,并对发生的事件进行处理。基本的模式是将一个监听器添加到已经创建的组件中,当相应的事件发生时,监听器的代码就会被执行。
4.5.1 SWT的常用事件
每一种类型的监听器,都有一个接口来定义这种监听器,由类提供事件信息,由应用程序接口方法负责添加监听器。如果一个监听器接口中定义了多个方法,则会提供一个适配器来实现监听器接口并同时提供空方法。所有的事件、监听器和适配器都放在包org.eclipse.swt.events中。
例如,添加组件选择事件的监听器为addSelectionListener,事件为SelectionEvent,相应的适配器为SelectionAdapter。添加鼠标事件的监听器为addMouseListener,事件为MouseEvent,相应的适配器为MouseAdapter。SWT中常用的事件如下:
1.addMouseListener 鼠标监听器。常用方法: mouseDown() 鼠标按下时触发。 mouseUP() 鼠标放开时触发。
mouseDoubleClick() 鼠标双击时触发。 2.addKeyListener 按键监听器。常用方法:
keyPressed() 当焦点在组件上时,按下键盘任一键时触发。但对某些组件(如按钮Button),按回车键时不能触发。
keyReleased() 按键弹起时触发。
3.addSelectionListener 组件选择监听器。常用方法:
widgetSelected() 当组件被选择(单击鼠标、焦点在组件上时按回车键)时触发。
4.addFocusListener 焦点监听器。常用方法: focusGained() 得到焦点时触发。 focusLost() 失去焦点时触发。
4.5.2 SWT的常用监听器应用实例
例4.18 鼠标监听器,监听鼠标双击事件。
package edu.ch4;
import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.events.*; import org.eclipse.swt.SWT; public class Sample4_18 {
static Text text;
public static void main(String[] args) {
Display display = new Display(); final Shell shell = new Shell(display); RowLayout rowLayout=new RowLayout(); rowLayout.marginWidth=20; rowLayout.marginHeight=30; shell.setLayout(rowLayout); shell.setText(\事件处理示例\);