您的位置:首页 > 其它

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

2017-05-11 16:31 239 查看
在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方法用于修改具体的鼠标事件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: