- PR -

SWTでタスクトレイを制御したことある方がいらっしゃいましたら

1
投稿者投稿内容
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-09-22 16:36
いつもお世話になっております。

SWTでやればできるって教えてもらって勉強しながらやってみましたが

私の力では限界がありました。 T.T

現在の状況は
タスクトレイに私が入れたいアイコンを設定してみたところOKでした。

問題@:マウスOverの時なくなってしまいました。どうすればいいでしょうか。なぜなくなってしまうんでしょうか。

問題A:別のPCにあるファイルの中身を確認して更新されてたら画像(アイコン)を変更したいです。

問題B:「SWT.Selection」などのマウスの制御ができるようにしたいです。
右クリックか、ただのクリックがなどです。 APIを調べてみてもこういう説明は全然なかったです。
どこに詳しいAPIまたは情報があるんでしょう。


結局私が作りたいのはWindows Updateみたいなものですけど
その前に初歩的な動きを確認したいです。

本当にめちゃくちゃな質問で申し訳ございません。

よろしくお願いします。


import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.graphics.*;

public class TaskTest {

  public static void main(String[] args) {
new TaskTest();
  }
  public TaskTest(){

  Display display = new Display();
  Tray tray = display.getSystemTray();
  TrayItem trayItem = new TrayItem(tray, SWT.NONE);
  trayItem.setImage(new Image(display, "tray.gif"));
  trayItem.setToolTipText("タスクトレイアイコン");
  trayItem.setVisible(true);
  trayItem.addListener(SWT.Selection, new Listener(){
   public void handleEvent(Event evt){
    System.out.println("クリックされました。");
}
   });
  trayItem.setImage(new Image(display, "pdficon.gif"));//だめでした。
 }
}
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-09-22 17:50
どーも、Wataです。
引用:

MUSEさんの書き込み (2004-09-22 16:36) より:
問題@:マウスOverの時なくなってしまいました。どうすればいいでしょうか。なぜなくなってしまうんでしょうか。

問題A:別のPCにあるファイルの中身を確認して更新されてたら画像(アイコン)を変更したいです。

問題B:「SWT.Selection」などのマウスの制御ができるようにしたいです。
右クリックか、ただのクリックがなどです。 APIを調べてみてもこういう説明は全然なかったです。


問題1はイベントループを書いていないから。
下にサンプルを載せるので参考にしてみてください
問題2はTheradとかTimerを使って、更新を監視するようにしてみてください。
問題3は難しいかな。左クリックとダブルクリックなら、下のサンプルで
区別できます。

コード:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;

public class TrayExample {

   private final Shell shell;
   private final Image image;
   private final TrayItem trayItem;

   public static void main(String[] args) {
      Display display = new Display();
      TrayExample main = new TrayExample(display);
      Shell shell = main.open();

      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) {
            display.sleep();
         }
      }
      main.image.dispose();
      display.dispose();
   }

   public TrayExample(Display display) {
      shell = new Shell(display, SWT.TITLE | SWT.CLOSE);
      shell.setText("TrayExample");
      shell.setLayout(new FillLayout());
      shell.setSize(100, 100);
      
      Tray tray = display.getSystemTray();
      trayItem = new TrayItem(tray, SWT.NONE);
      image = new Image(display, "tray.gif"); // ← 適当なファイル名に…
      trayItem.setImage(image);
      trayItem.setToolTipText("test!");
      trayItem.addSelectionListener(new SelectionListener() {
         public void widgetSelected(SelectionEvent e) {
            System.out.println("widgetSelected");
         }

         public void widgetDefaultSelected(SelectionEvent e) {
            System.out.println("widgetDefaultSelected");
            shell.setVisible(true);
            trayItem.setVisible(false);
         }
      });
      
      Button button = new Button(shell, SWT.PUSH);
      button.setText("隠す(&H)");
      button.addSelectionListener(new SelectionAdapter() {
         public void widgetSelected(SelectionEvent e) {
            trayItem.setVisible(true);
            shell.setVisible(false);
         }
      });
   }
   private Shell open() {
      shell.open();
      return shell;
   }
}


ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2004-09-22 18:15
eclipse のサイトの

SWT Component Development Resources の snippets (小さなサンプル集)

の、Tray, TrayItem の place a popup menu on the system tray にも一般的な処理が
載っいますので、参考になると思います。

# ついでに、Windowsではこの場所は「システムトレイ」って名前のようです。
# 「クイック起動バー」は別物で、ショートカットを並べておく場所ですね。
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-09-23 09:06
Wata様 ちいにぃ様

いつもお世話になっております。

ご回答有難うございました。^^

早速勉強させていただきます。


はまとみ
会議室デビュー日: 2004/10/06
投稿数: 3
投稿日時: 2004-10-06 18:54
便乗質問で失礼します。
eclipse3.0で、MOUSEさんのプログラムを入力して見たのですが、
Tray tray の宣言で、無効な型とかでエラーになってしまいます。
org.eclipse.swt.widgets. の中にはTray もTrayItemも見当たらず、
これは、eclipse3.0をUpdateとかしなければならないのでしょうか?。
初歩的な質問で申し訳ありません。
以上、よろしくお願いします。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-10-07 10:08
Wataです。
引用:

はまとみさんの書き込み (2004-10-06 18:54) より:
便乗質問で失礼します。
eclipse3.0で、MOUSEさんのプログラムを入力して見たのですが、
Tray tray の宣言で、無効な型とかでエラーになってしまいます。
org.eclipse.swt.widgets. の中にはTray もTrayItemも見当たらず、
これは、eclipse3.0をUpdateとかしなければならないのでしょうか?。


swt.jarをクラスパスにいれてあって、importしても型が見つからないと言うことですよね。
そんなはずはないと思いますが…。
org.eclipse.swt.browser.Browserとかはありますか?
もしないなら、swt.jarが2.xのものでないかもう一度確認してみてください。
はまとみ
会議室デビュー日: 2004/10/06
投稿数: 3
投稿日時: 2004-10-07 11:15
Wataさん。早速の御指摘ありがとうございます。
おっしゃるとおりswt.jar が旧バージョンでした。
おかげさまでコンパイルが通りました。
初歩的な質問に答えて頂きありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)