package com.vci.client.uif.engine.client.compare.dialog; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.KeyStroke; import com.vci.client.uif.engine.client.compare.dialog.renderer.CompareTreeNodeIcons; /** * 编辑菜单 * @author VCI-STGK006 * */ public class CompareDialogPopupMenu { /** * 父窗口 */ private NodeCompareDialog ed; /** * 右键菜单 */ private JPopupMenu pm; /** * 打开 */ private JMenuItem openMi; /** * 忽略菜单 */ private JMenuItem ignoredMi; /** * 更新link关系 */ private JMenuItem updateLinkMi; /** * 逐条修改菜单 */ private JMenuItem updateRightSingleMi; /** * 批量更新菜单 */ private JMenuItem updateRightBatchMi; /** * 解除关系 */ private JMenuItem deleteMi; /** * 保存按钮 */ private JMenuItem saveMi; /** * 调试功能,复制节点对象数据信息到系统剪切板 */ private JMenuItem debugMi; /** * 构造器 * @param eat Action * @param excelTree Excel树 * @param dsTree 数据库树 */ public CompareDialogPopupMenu(NodeCompareDialog ed) { this.ed = ed; createMenuItem(); } /** * 构造器 * @param eat * @param excelTree * @param dsTree * @param paramString */ public CompareDialogPopupMenu(NodeCompareDialog ed, String title) { this.ed = ed; createMenuItem(title); } /** * 创建右键菜单 * @param titles 菜单标题 */ public void createMenuItem(String ...titles) { if(titles == null || titles.length < 1) { pm = new JPopupMenu(); } else { pm = new JPopupMenu(titles[0]); } //打开 Action open = new AbstractAction("打开(O)") { private static final long serialVersionUID = 5145219953960994047L; @Override public void actionPerformed(ActionEvent e) { ed.doubleClickAction(); } }; openMi = new JMenuItem(open); openMi.setMnemonic(KeyEvent.VK_O); openMi.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK, true)); //忽略 Action ignored = new AbstractAction("忽略/还原(G)", CompareTreeNodeIcons.getInstance().getIcon("Ignored20x15.png")) { private static final long serialVersionUID = 5657208377333035328L; @Override public void actionPerformed(ActionEvent e) { ed.ignored(); } }; ignoredMi = new JMenuItem(ignored); ignoredMi.setMnemonic(KeyEvent.VK_G); ignoredMi.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_DOWN_MASK, true)); ignoredMi.setVisible(false); Action updateLink = new AbstractAction("更新链接(E)", CompareTreeNodeIcons.getInstance().getIcon("UpdateLink20x15.png")) { private static final long serialVersionUID = 3894180318359539111L; public void actionPerformed(ActionEvent e) { ed.updateLink(); } }; updateLinkMi = new JMenuItem(updateLink); updateLinkMi.setMnemonic(KeyEvent.VK_E); updateLinkMi.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK, true)); //单个更新 Action updateRightSingle = new AbstractAction("更新数据(R)", CompareTreeNodeIcons.getInstance().getIcon("UpdateRightSingle20x15.png")) { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { ed.updateRightSingle(); } }; updateRightSingleMi = new JMenuItem(updateRightSingle); updateRightSingleMi.setMnemonic(KeyEvent.VK_R); updateRightSingleMi.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_DOWN_MASK)); //递归更新 Action updateRightBatch = new AbstractAction("批量更新(T)", CompareTreeNodeIcons.getInstance().getIcon("UpdateRightBatch20x15.png")){ private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { ed.updateRigthBatch(); } }; updateRightBatchMi = new JMenuItem(updateRightBatch); updateRightBatchMi.setMnemonic(KeyEvent.VK_T); updateRightBatchMi.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_DOWN_MASK)); //删除关系 Action delete = new AbstractAction("删除(D)", CompareTreeNodeIcons.getInstance().getIcon("Delete20x15.png")) { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { ed.deleteAction(); } }; deleteMi = new JMenuItem(delete); deleteMi.setMnemonic(KeyEvent.VK_D); deleteMi.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK)); //保存 //绑定保存事件 Action save = new AbstractAction("保存(S)", CompareTreeNodeIcons.getInstance().getIcon("Save20x15.png")) { private static final long serialVersionUID = 7678552486046381848L; @Override public void actionPerformed(ActionEvent e) { ed.save(); } }; saveMi = new JMenuItem(save); saveMi.setMnemonic(KeyEvent.VK_S); saveMi.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK)); //debug //复制节点数据到系统剪切板 Action debugCopyData = new AbstractAction("复制节点数据(1)") { private static final long serialVersionUID = -7166740287624602439L; public void actionPerformed(ActionEvent paramActionEvent) { ed.debugCopyNodeData(); } }; debugMi = new JMenuItem(debugCopyData); debugMi.setMnemonic(KeyEvent.VK_1); debugMi.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.CTRL_DOWN_MASK, true)); pm.add(openMi); pm.addSeparator(); pm.add(ignoredMi); pm.add(updateLinkMi); pm.add(updateRightSingleMi); pm.add(updateRightBatchMi); pm.addSeparator(); pm.add(deleteMi); } /** * */ public void show(Component paramComponent, int paramInt1, int paramInt2) { pm.show(paramComponent, paramInt1, paramInt2); } /** * 绑定快捷键和事件 * @param com */ public void bindHotkeys(JComponent com) { //绑定打开事件 bindHotkeys(com, openMi); //绑定忽略事件 bindHotkeys(com, ignoredMi); //绑定更新link事件 bindHotkeys(com, updateLinkMi); //绑定更新事件 bindHotkeys(com, updateRightSingleMi); //绑定批量更新事件 bindHotkeys(com, updateRightBatchMi); //绑定删除事件 bindHotkeys(com, deleteMi); //绑定保存事件 bindHotkeys(com, saveMi); //debug bindHotkeys(com, debugMi); } /** * 将菜单快捷键绑定到控件上 * 当焦点在窗口中时,会触发绑定事件 * 所以整个窗口中只有一个控件绑定就可以了 * @param com 控件 * @param item 菜单 */ private void bindHotkeys(JComponent com, JMenuItem item) { Action action = item.getAction(); Object actionKey = action.getValue(Action.NAME); //com.getInputMap().put(item.getAccelerator(), actionKey); com.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(item.getAccelerator(), actionKey); com.getActionMap().put(actionKey, action); } }