Swing/DispatchEvent のバックアップ(No.14)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DispatchEvent へ行く。
- 1 (2008-02-11 (月) 21:32:38)
- 2 (2008-02-12 (火) 10:05:25)
- 3 (2008-02-13 (水) 17:25:14)
- 4 (2008-12-17 (水) 01:57:15)
- 5 (2011-04-22 (金) 18:01:46)
- 6 (2014-01-14 (火) 13:57:01)
- 7 (2015-02-10 (火) 15:24:12)
- 8 (2015-03-20 (金) 15:29:27)
- 9 (2016-12-30 (金) 18:45:32)
- 10 (2017-11-02 (木) 15:32:16)
- 11 (2017-12-12 (火) 13:41:44)
- 12 (2019-12-08 (日) 15:30:19)
- 13 (2021-06-08 (火) 11:23:03)
- 14 (2024-02-02 (金) 11:43:40)
- category: swing folder: DispatchEvent title: AWTEventを取得して入力イベントを監視 tags: [AWTEvent, Toolkit, AWTEventListener] author: aterai pubdate: 2008-02-11T21:32:38+09:00 description: AWTEventを取得して、マウスやキーボードの入力イベントを監視します。 image:
概要
AWTEvent
を取得して、マウスやキーボードの入力イベントを監視します。
Screenshot
Advertisement
サンプルコード
private static int DELAY = 10 * 1000; //10s
private final Timer timer = new Timer(DELAY, new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
setTestConnected(false);
Toolkit.getDefaultToolkit().removeAWTEventListener(awtEvent);
timer.stop();
}
});
private final AWTEventListener awtEvent = new AWTEventListener() {
@Override public void eventDispatched(AWTEvent e) {
if (timer != null && timer.isRunning()) {
// System.out.println("timer.restart()");
timer.restart();
}
}
};
JButton button = new JButton(new AbstractAction("Connect") {
@Override public void actionPerformed(ActionEvent e) {
setTestConnected(true);
Toolkit.getDefaultToolkit().addAWTEventListener(awtEvent,
AWTEvent.KEY_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK);
timer.setRepeats(false);
timer.start();
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、一定時間(10
秒)マウスやキーボードからの入力が無い場合は接続(ダミー)を終了するようAWTEventListener
をToolkit
に設定しています。
- Application Inactivity « Java Tips Weblogを参考にして
Toolkit.getDefaultToolkit().getSystemEventQueue().push(eventQueue)
は使用せず、以下のようにToolkit.getDefaultToolkit().addAWTEventListener(AWTEventListener)
を使う方法に変更timer
をtimer.setRepeats(false);
でスタート(一回で終了する)Toolkit.getDefaultToolkit().addAWTEventListener
でAWTEventListener
を設定AWTEvent
が発生した時にtimer.restart();
でタイマーをリセット- 時間がきたら
Toolkit.getDefaultToolkit().removeAWTEventListener
でAWTEvent
を取り除く JDK 1.7.0
以上の場合、LayerUI (Java Platform SE 8)で同様の処理が可能