weasis阅片相关功能切换机制的分析

在View2d中专门有一个方法用于按钮的创建

    protected JPopupMenu buidContexMenu(final MouseEvent evt) {
        JPopupMenu popupMenu = new JPopupMenu();
        TitleMenuItem itemTitle = new TitleMenuItem(Messages.getString("View2d.left_mouse"), popupMenu.getInsets()); //$NON-NLS-1$
        popupMenu.add(itemTitle);
        final EventManager event = EventManager.getInstance();
        popupMenu.setLabel(MouseActions.LEFT);
        String action = event.getMouseActions().getLeft();
        ButtonGroup groupButtons = new ButtonGroup();
        ImageViewerPlugin<DicomImageElement> view = eventManager.getSelectedView2dContainer();
        if (view != null) {
            final ViewerToolBar toolBar = view.getViewerToolBar();
            if (toolBar != null) {
                ActionListener leftButtonAction = new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (e.getSource() instanceof JRadioButtonMenuItem) {
                            JRadioButtonMenuItem item = (JRadioButtonMenuItem) e.getSource();
                            toolBar.changeButtonState(MouseActions.LEFT, item.getActionCommand());
                        }
                    }
                };

                List<ActionW> actionsButtons = ViewerToolBar.actionsButtons;
                synchronized (actionsButtons) {
                    for (int i = 0; i < actionsButtons.size(); i++) {
                        ActionW b = actionsButtons.get(i);
                        JRadioButtonMenuItem radio =
                            new JRadioButtonMenuItem(b.getTitle(), b.getIcon(), b.cmd().equals(action));
                        radio.setActionCommand(b.cmd());
                        radio.setAccelerator(KeyStroke.getKeyStroke(b.getKeyCode(), b.getModifier()));
                        // Trigger the selected mouse action
                        radio.addActionListener(toolBar);
                        // Update the state of the button in the toolbar
                        radio.addActionListener(leftButtonAction);
                        popupMenu.add(radio);
                        groupButtons.add(radio);
                    }
                }
            }
        }

在他里面为每一个右键条目都增加了监听器,一个用于同步更新toolbar上按钮的状态

另一个用于修改相应的鼠标监听事件,该方法在ViewerToolBar中

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() instanceof JRadioButtonMenuItem) {
            JRadioButtonMenuItem item = (JRadioButtonMenuItem) e.getSource();
            if (item.getParent() instanceof JPopupMenu) {
                JPopupMenu pop = (JPopupMenu) item.getParent();
                MouseActions mouseActions = eventManager.getMouseActions();
                mouseActions.setAction(pop.getLabel(), item.getActionCommand());
                ImageViewerPlugin<E> view = eventManager.getSelectedView2dContainer();
                if (view != null) {
                    view.setMouseActions(mouseActions);
                }
                if (pop.getInvoker() instanceof DropDownButton) {
                    changeButtonState(pop.getLabel(), item.getActionCommand());
                }
            }
        }
    }

然后就调用到了ImageViewerPlugin的如下方法

 public synchronized void setMouseActions(MouseActions mouseActions) {
        if (mouseActions == null) {
            for (DefaultView2d<E> v : view2ds) {
                v.disableMouseAndKeyListener();
                // Let the possibility to get the focus
                v.iniDefaultMouseListener();
            }
        } else {
            for (DefaultView2d<E> v : view2ds) {
                v.enableMouseAndKeyListener(mouseActions);
            }
        }
    }

最后就是我们熟悉的View2d的enableMouseAndKeyListener方法用于修改具体的鼠标事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值