package open.dolphin.client; import java.awt.Cursor; import java.awt.event.*; import javax.swing.*; /** * ComponentHolder * * @author Kazushi Minagawa */ public abstract class AbstractComponentHolder extends JLabel { /** Creates new ComponentHolder */ public AbstractComponentHolder() { this.putClientProperty("karteCompositor", AbstractComponentHolder.this); this.setFocusable(true); // Double Click this.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // StampEditor から戻った後に動作しないため boolean focus = requestFocusInWindow(); if (!focus) { requestFocus(); } if (e.getClickCount()==2 && (!e.isPopupTrigger())) { edit(); } } }); // Dragg DragDetect dt = new DragDetect(); this.addMouseListener(dt); this.addMouseMotionListener(dt); // Popup this.addMouseListener(new PopupListner()); this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); ActionMap map = this.getActionMap(); map.put(TransferHandler.getCutAction().getValue(Action.NAME), TransferHandler.getCutAction()); map.put(TransferHandler.getCopyAction().getValue(Action.NAME), TransferHandler.getCopyAction()); map.put(TransferHandler.getPasteAction().getValue(Action.NAME), TransferHandler.getPasteAction()); } class DragDetect implements MouseListener, MouseMotionListener { private MouseEvent firstMouseEvent; @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { firstMouseEvent = e; e.consume(); } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { if (firstMouseEvent != null) { e.consume(); //If they are holding down the control key, COPY rather than MOVE int ctrlMask = InputEvent.CTRL_DOWN_MASK; int action = ((e.getModifiersEx() & ctrlMask) == ctrlMask) ? TransferHandler.COPY : TransferHandler.MOVE; int dx = Math.abs(e.getX() - firstMouseEvent.getX()); int dy = Math.abs(e.getY() - firstMouseEvent.getY()); if (dx > 5 || dy > 5) { JComponent c = (JComponent) e.getSource(); TransferHandler handler = c.getTransferHandler(); handler.exportAsDrag(c, firstMouseEvent, action); firstMouseEvent = null; } } } @Override public void mouseMoved(MouseEvent e) { } @Override public void mouseClicked(MouseEvent me) {} } public abstract void edit(); class PopupListner extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { if (e.getClickCount()!=2) { mabeShowPopup(e); } } @Override public void mouseReleased(MouseEvent e) { if (e.getClickCount()!=2) { mabeShowPopup(e); } } } public abstract void mabeShowPopup(MouseEvent e); }