- PR -

SWTで一定の条件下のみ、リスナーを動かしたい

投稿者投稿内容
しんい
ベテラン
会議室デビュー日: 2005/09/01
投稿数: 55
投稿日時: 2005-09-30 16:40
SWTに関してです。

・MouseDownした時のみ、MouseMoveのリスナーを起動させる。
・10分置きにリスナーが起動し、特定の条件が満たされると、リスナーが停止する。
というようなアプリケーションを作成したいと考えております。

addListenerを一定の条件下で指定すると、その後リスナーが起動したままになってしまいます。
限定的な起動、もしくはリスナーの停止を出来る方法があれば、教えて頂けないでしょうか。

よろしくお願い致します。

[ メッセージ編集済み 編集者: しん 編集日時 2005-09-30 16:44 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-30 16:48
>・MouseDownした時のみ、MouseMoveのリスナーを起動させる。
MouseDrag みたいなイベントはないでしょうか?

>限定的な起動、もしくはリスナーの停止を出来る方法があれば、教えて頂けないでしょうか。
リスナー内で特定の条件を満たしているか判断するのはいかがでしょう?
あとは必要に応じて removeListener 、もできる、と思います、たぶん(SWTは知らないので想像で言ってます)。
しんい
ベテラン
会議室デビュー日: 2005/09/01
投稿数: 55
投稿日時: 2005-09-30 17:04
インギさん。早速のご返答ありがとうございます。

>MouseDrag みたいなイベントはないでしょうか?
残念ながら、無いのです・・・。
が、Dragと聞いて、今思いつきました。
MouseDownをしたら処理を開始。MouseUpをしたら処理を終了すると、近い状態が実現出来るかも知れませんね。ヒント頂きました。ありがとうございます。

>リスナー内で特定の条件を満たしているか判断するのはいかがでしょう?
すみません、あまり原理を理解していないのですが、リスナーを立ち上げているとメモリを食ってしまうイメージを持っています。
その為、可能であれば必要な時だけ立ち上げたいと思っております。

>removeListener
使い方がまずかったのかも知れないのですが、これでリスナーを取る事が出来ませんでした。可能なのであれば、方法を教えて頂けるとありがたいです。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-30 17:16
>MouseDownをしたら処理を開始。MouseUpをしたら処理を終了すると、近い状態が実現出来るかも知れません
>ね。ヒント頂きました。ありがとうございます。
そうですね。MouseDownでフラグを立てて、MouseUpでフラグをおろし、MouseMove 内でフラグを確認すればドラッグ中かどうか検出できるでしょう。

>すみません、あまり原理を理解していないのですが、リスナーを立ち上げているとメモリを食ってしまうイメー
>ジを持っています。
リスナが起動される、されないに関わらずリスナのインスタンスは存在しているわけですからメモリを特別食うということはないでしょう。
もちろん、リスナを起動する側で別途リスナの参照を保持することになりますがほんの数バイトといった程度のはずですので気にすることはないでしょう。
しんい
ベテラン
会議室デビュー日: 2005/09/01
投稿数: 55
投稿日時: 2005-09-30 17:24
インギさんにはお世話になりっぱなしです。ありがとうございます。

リスナーって、そんなにメモリを食わないのですね。
アプリケーション専用のスクリーンセーバーを起動する際、
int型の変数を宣言して、MouseMoveとかKeypressedが発生する度に、++をしていました。
(一定時間経過後、そのint型が0だとスクリーンセーバーを立ち上げるのです。)
コンソールに、びっくりするぐらい数字が羅列されるので、まずいのではないかと思ってしまいました。
勉強になりました。ありがとうございます。
a-san
ベテラン
会議室デビュー日: 2004/06/01
投稿数: 53
投稿日時: 2005-09-30 23:46
左ボタンを押したときに処理したいのであれば、こんな風にすればできますよ。
コード:

public void mouseMove(MouseEvent e) {
if (e.stateMask == SWT.BUTTON1) {
// 左ボタンが押されているとき点を打つ
gc.drawPoint(e.x, e.y);
}
}




[ メッセージ編集済み 編集者: a-san 編集日時 2005-09-30 23:47 ]

[ メッセージ編集済み 編集者: a-san 編集日時 2005-09-30 23:49 ]

[ メッセージ編集済み 編集者: a-san 編集日時 2005-09-30 23:49 ]
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2005-10-01 03:05
Drag開始のイベントはあるようです。Example plug-inで確認しました。

で、どのListener/Adaptorを使えばよいかは確認していませんが、Drag開始の検出だとここらへんかも。
DragSourceListener

また、コードは見てませんが SWT Snippets にいくつかD&Dのサンプルコードがあるようですし、
もしGEFを使われるならObserveEclipseに解説がありそうです。

* URLをBBコードで書き換え、SWT Snippet, ObserveEclipseのリンクを追加


[ メッセージ編集済み 編集者: ちいにぃ 編集日時 2005-10-01 11:31 ]
しんい
ベテラン
会議室デビュー日: 2005/09/01
投稿数: 55
投稿日時: 2005-10-04 06:05
ちいにぃさん、ありがとうございます。

教えて頂いた情報を基に、調べてみます。

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