新公司新环境,现在这家公司有个系统的client是基于SWT/JFace的界面开发。第一眼看到一个Display的例子时,感觉真是麻烦,还要循环去等待消息传递,很简单的MessageBox都要while(true)。但是经过一两天的揣摩,对swt的运行机制有初步的了解后,感觉同awt虽然有一点区别,但共通性很强,所以还是很好上好的^_^。对于刚刚接触的我来说,纯手写swt界面,外观实在不怎么样-_-#。
贴一段simple example,自己留念一下 ^_^
上面的代码,extends ApplicationWindow 后,创建一个Button 再给button增加一个监听 ,就差不多实现一个最简单的例子。继续jface的ApplicationWindow后,最明显的一个改观就是。不用我再去
这个过程,真的另人相当的不快。另外ApplicationWindow有现成的菜单栏、工具栏、状态栏。只需要做少量的代码,就可以实现。不想写了,下次继续。最后加一张用于applicationwindow的widget关系图。
贴一段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("练习");
}
}
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();
}
}
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();
}
{
if(!display.readAndDispatch())
display.sleep();
}