SWT笔记1,组件的关系,屏幕信息

import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.SWT;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.widgets.Text;/** * 测试父组件被释放,子组件或子窗口也将被释放 * display为shell的父组件 * shell可以为其他shell的父组件 * 测试打印屏幕尺寸的方法 * */public class testShellTree {private Text text;/** * Launch the application. * @param args */public static void main(String[] args) {try {testShellTree window = new testShellTree();window.open();} catch (Exception e) {e.printStackTrace();}}/** * Open the window. */public void open() {Display display = Display.getDefault();//父窗口Shell shellParent = new Shell();shellParent.setSize(602, 300);shellParent.setText("Parent shell, close this one will close the child window, too");//释放display的按钮Button btn = new Button(shellParent, SWT.NONE);btn.addSelectionListener(new SelectionAdapter() {@Overridepublic void widgetSelected(SelectionEvent e) {Display.getDefault().dispose();}});btn.setBounds(10, 10, 193, 27);btn.setToolTipText("关闭display对象后,其所有子shell都将被关闭");btn.setText("click me to dispose the Display");//显示屏幕信息的文本框text = new Text(shellParent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);text.setBounds(28, 91, 400, 127);String monitorInfo=Display.getDefault().getPrimaryMonitor().getBounds().toString();String clientAreaInfo=Display.getDefault().getPrimaryMonitor().getClientArea().toString();text.setText("屏幕大小为:"+monitorInfo+"\n用户区域大小为(去掉了任务栏的大小):"+clientAreaInfo);//子窗口Shell shellChild=new Shell(shellParent);shellChild.setText("Child, can be closed independently");shellChild.setSize(400, 300);Button btn2 = new Button(shellChild, SWT.NONE);btn2.addSelectionListener(new SelectionAdapter() {@Overridepublic void widgetSelected(SelectionEvent e) {Display.getDefault().dispose();}});btn2.setToolTipText("关闭display对象后,其所有子shell都将被关闭");btn2.setBounds(10, 117, 193, 27);btn2.setText("click me to dispose the Display");shellChild.setLocation(shellParent.getLocation().x+400, shellParent.getLocation().y+200);shellParent.open();shellChild.open();shellParent.layout();//事件循环while (!shellParent.isDisposed()||!shellChild.isDisposed()) {if (!display.readAndDispatch()) {display.sleep();}}}}