Swing添加鼠标右键菜单单击选择监听,并显示右键菜单


    public static final void initMouseInputListener(final JComponent component, final JPopupMenu popupMenu,
            boolean enableRightKey)
    {
        final MouseInputListener mouseInputListener = getMouseInputListener(component, popupMenu, enableRightKey);
        component.addMouseListener(mouseInputListener);
        component.addMouseMotionListener(mouseInputListener);
    }

    /**
     * 添加鼠标右键单击选择监听,并显示右键菜单.<br/>
     *
     * @param table
     * @param popupMenu
     * @param enableRightKey
     * @return MouseInputListener
     */
    public static final MouseInputListener getMouseInputListener(final JComponent component,
            final JPopupMenu popupMenu, final boolean enableRightKey)
    {
        return new MouseInputListener()
        {
            public void mouseClicked(MouseEvent e)
            {
                processEvent(e);
            }

            public void mousePressed(MouseEvent e)
            {
                processEvent(e);
            }

            public void mouseReleased(MouseEvent e)
            {
                if (e.getSource() instanceof JScrollPane)
                {
                    JScrollPane scrollPane = (JScrollPane) e.getSource();
                    if (scrollPane.getViewport().getComponent(0) instanceof JTable)
                    {
                        JTable jtb = (JTable) scrollPane.getViewport().getComponent(0);
                        DefaultCellEditor dce = (DefaultCellEditor) jtb.getCellEditor();
                        if (dce != null)
                        {
                            dce.stopCellEditing();
                        }

                        jtb.getSelectionModel().clearSelection();
                    }
                }

                processEvent(e);

                if ((e.getModifiers() & MouseEvent.BUTTON3_MASK) != 0 && !e.isControlDown() && !e.isShiftDown())
                {
                    // 右键菜单显示
                    popupMenu.show(component, e.getX(), e.getY());
                }
            }

            public void mouseEntered(MouseEvent e)
            {
                processEvent(e);
            }

            public void mouseExited(MouseEvent e)
            {
                processEvent(e);
            }

            public void mouseDragged(MouseEvent e)
            {
                processEvent(e);
            }

            public void mouseMoved(MouseEvent e)
            {
                processEvent(e);
            }

            private void processEvent(MouseEvent e)
            {
                if (enableRightKey)
                {
                    int modifiers = e.getModifiers();
                    boolean isRow = false;
                    if ((modifiers & MouseEvent.BUTTON3_MASK) != 0)
                    {
                        modifiers -= MouseEvent.BUTTON3_MASK;
                        // 将右键改成左键
                        modifiers |= MouseEvent.BUTTON1_MASK;

                        if (e.getSource() instanceof JTable)
                        {
                            JTable table = (JTable) e.getSource();
                            int selIndex = table.rowAtPoint(e.getPoint());
                            int[] indexs = table.getSelectedRows();
                            if (selIndex >= 0 && indexs.length > 1)
                            {
                                for (int in : indexs)
                                {
                                    if (selIndex == in)
                                    {
                                        isRow = true;
                                    }
                                }
                            }
                            else
                            {
                                isRow = false;
                            }
                        }
                        if (!isRow)
                        {
                            MouseEvent ne = new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), modifiers,
                                    e.getX(), e.getY(), e.getClickCount(), false);

                            component.dispatchEvent(ne);
                        }
                        return;
                    }
                }
            }
        };
    }

发布了36 篇原创文章 · 获赞 5 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/ccren/article/details/38514997