Posted on 2007-07-20 21:22
kooyee 阅读(443)
评论(0) 编辑 收藏 所属分类:
GUI骨衣
swt的system tray,只能处理三种事件:左键单击,左键双击和右键双击,右键单击
这是我看swt 3.0.1 win32的源码所知
此demo有以下功能:
1.左键单击时 ,隐藏,显示主窗口
2.右键单击,弹出菜单
注意:
1.左键双击和右键双击是一种事件,无法区分
2.左键双击将产生以下事件:左键单击,左键双击,左键单击
3.关于弹出菜单,menu必须有一个parent,如果程序里没有任何shell,可以建一个不可见的shell专门作为menu的parent.
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.graphics.Image;
class HelloTray implements SelectionListener{
Display display;
Shell shell;
Button hello;
Tray tray;
TrayItem ti;
Menu menu;
MenuItem mi1;
MenuItem mi2;
MenuItem quit;
public HelloTray(){
display = Display.getDefault();
shell = new Shell();
FillLayout fillLayout = new FillLayout();
fillLayout.type = SWT.VERTICAL;
shell.setLayout(fillLayout);
hello = new Button(shell, SWT.NONE);
hello.setText("Hello World!");
hello.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(hello.getText().equals("Hello World!"))
hello.setText("Clicked");
else
hello.setText("Hello World!");
}
});
menu=new Menu(shell);
mi1=new MenuItem(menu,SWT.PUSH);
mi1.setText("MenuItem 1");
mi1.addSelectionListener(this);
mi2=new MenuItem(menu,SWT.PUSH);
mi2.setText("MenuItem 2");
mi2.addSelectionListener(this);
quit=new MenuItem(menu,SWT.PUSH);
quit.setText("Quit");
quit.addSelectionListener(this);
//生成swt的tray
tray=display.getSystemTray();
ti=new TrayItem(tray,0);
ti.setToolTipText("This is a swt Tray!");
ti.setImage(new Image(display,"E:\My Documents\My Pictures\alm.gif"));
//swt,tray的所有事件:
ti.addSelectionListener(new SelectionListener(){
//左键单击
public void widgetSelected(SelectionEvent e){
System.out.println("Tray Selcted");
//左键单击时 ,隐藏,显示主窗口
if(shell.isVisible()){
shell.setVisible(false);
}else{
shell.setVisible(true);
shell.forceActive();
}
}
//左键双击,右键双击,都是它
public void widgetDefaultSelected(SelectionEvent e){
System.out.println("Tray widgetDefaultSelected");
}
});
//右键单击,弹出菜单
ti.addListener(SWT.MenuDetect,new Listener(){
public void handleEvent(Event event){
System.out.println("SWT.MenuDetect");
menu.setLocation(display.getCursorLocation());
menu.setVisible(true);
}
});
}
public void start(){
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public static void main(String[] args) {
HelloTray app=new HelloTray();
app.start();
}
public void widgetSelected(SelectionEvent e){
System.out.println(e.getSource()+" selected.");
if(e.getSource()==quit){
System.out.println("Quit");
display.dispose();
System.exit(0);
}
}
public void widgetDefaultSelected(SelectionEvent e){
}
}