OSDN Git Service

ESCキーでツールバー検索のキャンセルα版
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / JTextFieldWithPopup.java
1 package tainavi;\r
2 \r
3 import java.awt.event.ActionEvent;\r
4 import java.awt.event.KeyEvent;\r
5 import java.util.ArrayList;\r
6 \r
7 import javax.swing.AbstractAction;\r
8 import javax.swing.ActionMap;\r
9 import javax.swing.InputMap;\r
10 import javax.swing.JComponent;\r
11 import javax.swing.JTextField;\r
12 import javax.swing.KeyStroke;\r
13 \r
14 public class JTextFieldWithPopup extends JTextField {\r
15 \r
16         private static final long serialVersionUID = 1L;\r
17 \r
18         private static final String ESCKEYACTION = "escape-cancel";\r
19         \r
20         public JTextFieldWithPopup() {\r
21                 super();\r
22                 this.addMouseListener(new TextEditPopupMenu());\r
23                 \r
24                 InputMap im = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);\r
25                 ActionMap am = this.getActionMap();\r
26                 im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), ESCKEYACTION);\r
27                 am.put(ESCKEYACTION, new CancelAction());\r
28         }\r
29 \r
30         public JTextFieldWithPopup(int col) {\r
31                 super(col);\r
32                 this.addMouseListener(new TextEditPopupMenu());\r
33                 \r
34                 InputMap im = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);\r
35                 ActionMap am = this.getActionMap();\r
36                 im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), ESCKEYACTION);\r
37                 am.put(ESCKEYACTION, new CancelAction());\r
38         }\r
39         \r
40         //\r
41         \r
42         private class CancelAction extends AbstractAction {\r
43 \r
44                 private static final long serialVersionUID = 1L;\r
45 \r
46                 @Override\r
47                 public void actionPerformed(ActionEvent e) {\r
48                         JTextFieldWithPopup jtf = (JTextFieldWithPopup) e.getSource();\r
49                         \r
50                         CancelEvent ev = new CancelEvent(jtf, CancelEvent.Cause.TOOLBAR_SEARCH);\r
51                         for ( CancelListener l : cancel_listeners ) {\r
52                                 l.cancelRised(ev);\r
53                         }\r
54                 }\r
55         };\r
56         \r
57         //\r
58         \r
59         private ArrayList<CancelListener> cancel_listeners = new ArrayList<CancelListener>();\r
60         \r
61         public void addCancelListener(CancelListener l) {\r
62                 if ( ! cancel_listeners.contains(l) ) {\r
63                         cancel_listeners.add(l);\r
64                 }\r
65         }\r
66         \r
67         public void removeCancelListener(CancelListener l) {\r
68                 cancel_listeners.remove(l);\r
69         }\r
70 }\r