OSDN Git Service

dmg作成バージョンの取得方法の修正
[charactermanaj/CharacterManaJ.git] / src / charactermanaj / ui / scrollablemenu / JScrollerMenuItem.java
1 package charactermanaj.ui.scrollablemenu;
2
3 import java.awt.event.MouseEvent;
4
5 import javax.swing.Icon;
6 import javax.swing.JMenuItem;
7 import javax.swing.event.EventListenerList;
8
9 /**
10  * スクローラブルメニューのスクローラーアイテムのメニュー項目
11  * 
12  * @author seraphy
13  */
14 public class JScrollerMenuItem extends JMenuItem {
15
16         /**
17          * シリアライズバージョンID
18          */
19         private static final long serialVersionUID = -1749741596476938310L;
20         /**
21          * イベントリスナのコレクション
22          */
23         protected EventListenerList _listeners = new EventListenerList();
24
25         /**
26          * スクローラーのアイコンを指定してスクローラーアイテムのメニュー項目を構築します.
27          * 
28          * @param icon
29          *            アイコン
30          */
31         public JScrollerMenuItem(Icon icon) {
32                 setIcon(icon);
33         }
34
35         /**
36          * スクローラブルメニューイベントのイベントリスナを登録します.
37          * 
38          * @param l
39          *            リスナー
40          */
41         public void addScrollableMenuEventListener(ScrollableMenuEventListener l) {
42                 _listeners.add(ScrollableMenuEventListener.class, l);
43         }
44
45         /**
46          * スクローラブルメニューイベントのイベントリスナを登録解除します.
47          * 
48          * @param l
49          *            リスナー
50          */
51         public void removeScrollableMenuEventListener(ScrollableMenuEventListener l) {
52                 _listeners.remove(ScrollableMenuEventListener.class, l);
53         }
54
55         /**
56          * マウスクリックでメニューアイテムとしてのイベントが発生しないように、 マウスイベントをキャプチャして、スクローラブルメニューイベントに変換する。
57          * 
58          * @param e
59          */
60         @Override
61         protected void processMouseEvent(MouseEvent e) {
62                 ScrollableMenuEvent ee = null;
63                 int mouseEventId = e.getID();
64                 if (mouseEventId == MouseEvent.MOUSE_PRESSED) {
65                         // マウスダウン時、スクロール開始
66                         ee = new ScrollableMenuEvent(this, true);
67                 }
68                 if (mouseEventId == MouseEvent.MOUSE_RELEASED) {
69                         // マウスアップされた場合、スクロール停止
70                         ee = new ScrollableMenuEvent(this, false);
71                 }
72                 if (ee != null) {
73                         fireScrollableMenuEvent(ee);
74                 }
75         }
76
77         /**
78          * スクローラブルメニューイベントを送信する
79          * 
80          * @param e
81          *            メニューイベント
82          */
83         protected void fireScrollableMenuEvent(ScrollableMenuEvent e) {
84                 for (ScrollableMenuEventListener l : _listeners
85                                 .getListeners(ScrollableMenuEventListener.class)) {
86                         if (e.isScrolling()) {
87                                 l.start(e);
88                         } else {
89                                 l.end(e);
90                         }
91                 }
92         }
93 }