package jp.crwdev.app.util; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.KeyStroke; import javax.swing.text.DefaultEditorKit; /** * テキストフィールドにCut/Copy/Paste/SelectAllのポップアップメニューを追加するマウスリスナー * */ public class PopupMenuMouseListener implements MouseListener { @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { popupMenu(e); } @Override public void mouseReleased(MouseEvent e) { popupMenu(e); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } private void popupMenu(MouseEvent e) { if(e.isPopupTrigger()){ JComponent c = (JComponent)e.getSource(); showPopup(c, e.getX(), e.getY()); c.requestFocus(); e.consume(); } } private void showPopup(JComponent c, int x, int y) { JPopupMenu menu = new JPopupMenu(); ActionMap am = c.getActionMap(); Action cut = am.get(DefaultEditorKit.cutAction); addMenu(menu, "切り取り(X)", cut, 'X', KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_DOWN_MASK)); Action copy = am.get(DefaultEditorKit.copyAction); addMenu(menu, "コピー(C)", copy, 'C', KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK)); Action paste = am.get(DefaultEditorKit.pasteAction); addMenu(menu, "貼り付け(V)", paste, 'V', KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_DOWN_MASK)); Action all = am.get(DefaultEditorKit.selectAllAction); addMenu(menu, "すべて選択(A)", all, 'A', KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK)); menu.show(c, x, y); } protected void addMenu(JPopupMenu pmenu, String text, Action action, int mnemonic, KeyStroke ks) { if (action != null) { JMenuItem mi = pmenu.add(action); if (text != null) { mi.setText(text); } if (mnemonic != 0) { mi.setMnemonic(mnemonic); } if (ks != null) { mi.setAccelerator(ks); } } } }