kooyee ‘s blog

开源软件, 众人努力的结晶, 全人类的共同财富
posts - 103, comments - 55, trackbacks - 0, articles - 66
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

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){ 
}
}

只有注册用户登录后才能发表评论。


网站导航: