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){ 
          }
          }
          主站蜘蛛池模板: 青河县| 万山特区| 安庆市| 庆安县| 三明市| 神农架林区| 新闻| 陇西县| 锦屏县| 合阳县| 安龙县| 芦溪县| 共和县| 鄢陵县| 中西区| 新干县| 平安县| 清河县| 保靖县| 安塞县| 内丘县| 普兰店市| 祁东县| 伊宁市| 锡林郭勒盟| 台山市| 承德市| 根河市| 嘉荫县| 年辖:市辖区| 柏乡县| 阿尔山市| 文水县| 根河市| 古交市| 治多县| 南澳县| 吉林省| 遵义市| 济阳县| 晋中市|