swt tray demo:右键菜单,单击隐藏,所有事件的例子

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值