简单的JFace ApplicationWindow例程时间:2022-11-11 16:49:16新公司新环境,现在这家公司有个系统的client是基于SWT/JFace的界面开发。第一眼看到一个Display的例子时,感觉真是麻烦,还要循环去等待消息传递,很简单的MessageBox都要while(true)。但是经过一两天的揣摩,对swt的运行机制有初步的了解后,感觉同awt虽然有一点区别,但共通性很强,所以还是很好上好的^_^。对于刚刚接触的我来说,纯手写swt界面,外观实在不怎么样-_-#。 贴一段simple example,自己留念一下 ^_^ package TestJFace; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class SimpleAppWindow extends ApplicationWindow ... { public SimpleAppWindow() ...{ super(null); } public void show() ...{ setBlockOnOpen(true); open(); } protected Control createContents(final Composite parent) ...{ Button b = new Button(parent , SWT.PUSH); b.setText("button"); b.addSelectionListener(new SelectionAdapter() ...{ public void widgetSelected(SelectionEvent ex) ...{ MessageDialog.openConfirm(parent.getShell(), "title", "button 1 pressed"); } }); return parent; } protected void configureShell(Shell shell) ...{ super.configureShell(shell); shell.setText("练习"); }} package TestJFace; import org.eclipse.swt.widgets.Display; public class AppMain ... { public static void main(String[] args) ...{ new SimpleAppWindow().show(); Display.getCurrent().dispose(); }} 上面的代码,extends ApplicationWindow 后,创建一个Button 再给button增加一个监听 ,就差不多实现一个最简单的例子。继续jface的ApplicationWindow后,最明显的一个改观就是。不用我再去 while ( ! shellTop.isDisposed()) ... { if(!display.readAndDispatch()) display.sleep();} 这个过程,真的另人相当的不快。另外ApplicationWindow有现成的菜单栏、工具栏、状态栏。只需要做少量的代码,就可以实现。不想写了,下次继续。最后加一张用于applicationwindow的widget关系图。