为什么右键单击在java应用程序上不起作用?

为什么右键单击在java应用程序上不起作用?,java,right-click,Java,Right Click,我制作了一个基于Java Swing的应用程序。 在我的应用程序中,如果我单击JFrame上的任何位置或任何东西,则我的右键单击不起作用? 我没有设置这样的设置..那为什么不工作呢? 基本上我的键盘不起作用,然后我尝试用鼠标复制粘贴数据,然后我才知道…我的右键单击在我的应用程序的任何区域都不起作用…你的右键单击工作正常-在Swing中,不获取你在其他应用程序中习惯的上下文菜单是正常的。如果你想有一个弹出菜单,右键点击打开,例如剪切/复制/粘贴操作,你必须自己实现它。我在我的应用程序中使用类似的东

我制作了一个基于Java Swing的应用程序。
在我的应用程序中,如果我单击JFrame上的任何位置或任何东西,则我的右键单击不起作用?
我没有设置这样的设置..那为什么不工作呢?


基本上我的键盘不起作用,然后我尝试用鼠标复制粘贴数据,然后我才知道…我的右键单击在我的应用程序的任何区域都不起作用…

你的右键单击工作正常-在Swing中,不获取你在其他应用程序中习惯的上下文菜单是正常的。如果你想有一个弹出菜单,右键点击打开,例如剪切/复制/粘贴操作,你必须自己实现它。我在我的应用程序中使用类似的东西:

public class ContextMenuMouseListener extends MouseAdapter {
    private JPopupMenu popup = new JPopupMenu();

    private Action cutAction;
    private Action copyAction;
    private Action pasteAction;
    private Action undoAction;
    private Action selectAllAction;

    private JTextComponent textComponent;
    private String savedString = "";
    private Actions lastActionSelected;

    private enum Actions { UNDO, CUT, COPY, PASTE, SELECT_ALL };

    public ContextMenuMouseListener() {
        undoAction = new AbstractAction("Undo") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                    textComponent.setText("");
                    textComponent.replaceSelection(savedString);

                    lastActionSelected = Actions.UNDO;
            }
        };

        popup.add(undoAction);
        popup.addSeparator();

        cutAction = new AbstractAction("Cut") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                lastActionSelected = Actions.CUT;
                savedString = textComponent.getText();
                textComponent.cut();
            }
        };

        popup.add(cutAction);

        copyAction = new AbstractAction("Copy") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                lastActionSelected = Actions.COPY;
                textComponent.copy();
            }
        };

        popup.add(copyAction);

        pasteAction = new AbstractAction("Paste") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                lastActionSelected = Actions.PASTE;
                savedString = textComponent.getText();
                textComponent.paste();
            }
        };

        popup.add(pasteAction);
        popup.addSeparator();

        selectAllAction = new AbstractAction("Select All") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                lastActionSelected = Actions.SELECT_ALL;
                textComponent.selectAll();
            }
        };

        popup.add(selectAllAction);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if (e.getModifiers() == InputEvent.BUTTON3_MASK) {
            if (!(e.getSource() instanceof JTextComponent)) {
                return;
            }

            textComponent = (JTextComponent) e.getSource();
            textComponent.requestFocus();

            boolean enabled = textComponent.isEnabled();
            boolean editable = textComponent.isEditable();
            boolean nonempty = !(textComponent.getText() == null || textComponent.getText().equals(""));
            boolean marked = textComponent.getSelectedText() != null;

            boolean pasteAvailable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).isDataFlavorSupported(DataFlavor.stringFlavor);

            undoAction.setEnabled(enabled && editable && (lastActionSelected == Actions.CUT || lastActionSelected == Actions.PASTE));
            cutAction.setEnabled(enabled && editable && marked);
            copyAction.setEnabled(enabled && marked);
            pasteAction.setEnabled(enabled && editable && pasteAvailable);
            selectAllAction.setEnabled(enabled && nonempty);

            int nx = e.getX();

            if (nx > 500) {
                nx = nx - popup.getSize().width;
            }

            popup.show(e.getComponent(), nx, e.getY() - popup.getSize().height);
        }
    }
}

最后,您应该将此侦听器附加到任何文本组件上,以便在右键单击时具有上下文菜单。

您的右键单击工作正常-在Swing中,不获取您在其他应用程序中习惯的上下文菜单是正常的。如果你想有一个弹出菜单,右键点击打开,例如剪切/复制/粘贴操作,你必须自己实现它。我在我的应用程序中使用类似的东西:

public class ContextMenuMouseListener extends MouseAdapter {
    private JPopupMenu popup = new JPopupMenu();

    private Action cutAction;
    private Action copyAction;
    private Action pasteAction;
    private Action undoAction;
    private Action selectAllAction;

    private JTextComponent textComponent;
    private String savedString = "";
    private Actions lastActionSelected;

    private enum Actions { UNDO, CUT, COPY, PASTE, SELECT_ALL };

    public ContextMenuMouseListener() {
        undoAction = new AbstractAction("Undo") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                    textComponent.setText("");
                    textComponent.replaceSelection(savedString);

                    lastActionSelected = Actions.UNDO;
            }
        };

        popup.add(undoAction);
        popup.addSeparator();

        cutAction = new AbstractAction("Cut") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                lastActionSelected = Actions.CUT;
                savedString = textComponent.getText();
                textComponent.cut();
            }
        };

        popup.add(cutAction);

        copyAction = new AbstractAction("Copy") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                lastActionSelected = Actions.COPY;
                textComponent.copy();
            }
        };

        popup.add(copyAction);

        pasteAction = new AbstractAction("Paste") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                lastActionSelected = Actions.PASTE;
                savedString = textComponent.getText();
                textComponent.paste();
            }
        };

        popup.add(pasteAction);
        popup.addSeparator();

        selectAllAction = new AbstractAction("Select All") {

            @Override
            public void actionPerformed(ActionEvent ae) {
                lastActionSelected = Actions.SELECT_ALL;
                textComponent.selectAll();
            }
        };

        popup.add(selectAllAction);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if (e.getModifiers() == InputEvent.BUTTON3_MASK) {
            if (!(e.getSource() instanceof JTextComponent)) {
                return;
            }

            textComponent = (JTextComponent) e.getSource();
            textComponent.requestFocus();

            boolean enabled = textComponent.isEnabled();
            boolean editable = textComponent.isEditable();
            boolean nonempty = !(textComponent.getText() == null || textComponent.getText().equals(""));
            boolean marked = textComponent.getSelectedText() != null;

            boolean pasteAvailable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).isDataFlavorSupported(DataFlavor.stringFlavor);

            undoAction.setEnabled(enabled && editable && (lastActionSelected == Actions.CUT || lastActionSelected == Actions.PASTE));
            cutAction.setEnabled(enabled && editable && marked);
            copyAction.setEnabled(enabled && marked);
            pasteAction.setEnabled(enabled && editable && pasteAvailable);
            selectAllAction.setEnabled(enabled && nonempty);

            int nx = e.getX();

            if (nx > 500) {
                nx = nx - popup.getSize().width;
            }

            popup.show(e.getComponent(), nx, e.getY() - popup.getSize().height);
        }
    }
}

最后,您应该将此侦听器附加到您希望右键单击时具有上下文菜单的任何文本组件。

您的意思是您没有上下文菜单吗?在Swing应用程序中,您必须自己添加上下文菜单。
有关详细信息,请参阅。

您的意思是没有上下文菜单吗?在Swing应用程序中,您必须自己添加上下文菜单。
class Popup extends JPopupMenu
{
    final static long serialVersionUID = 0;

    Clipboard clipboard;

    UndoManager undoManager;

    JMenuItem jmenuItem_undo;
    JMenuItem jmenuItem_cut;
    JMenuItem jmenuItem_copy;
    JMenuItem jmenuItem_paste;
    JMenuItem jmenuItem_delete;
    JMenuItem jmenuItem_selectAll;

    JTextComponent jtextComponent;

    public Popup()
    {
        undoManager = new UndoManager();

        clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

        jmenuItem_undo = new JMenuItem("undo");
        jmenuItem_undo.setEnabled(false);
        jmenuItem_undo.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                undoManager.undo();
            }
        });

        this.add(jmenuItem_undo);

        this.add(new JSeparator());

        jmenuItem_cut = new JMenuItem("cut");
        jmenuItem_cut.setEnabled(false);
        jmenuItem_cut.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.cut();
            }
        });

        this.add(jmenuItem_cut);

        jmenuItem_copy = new JMenuItem("copy");
        jmenuItem_copy.setEnabled(false);
        jmenuItem_copy.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.copy();
            }
        });

        this.add(jmenuItem_copy);

        jmenuItem_paste = new JMenuItem("paste");
        jmenuItem_paste.setEnabled(false);
        jmenuItem_paste.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.paste();
            }
        });

        this.add(jmenuItem_paste);

        jmenuItem_delete = new JMenuItem("delete");
        jmenuItem_delete.setEnabled(false);
        jmenuItem_delete.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.replaceSelection("");
            }
        });

        this.add(jmenuItem_delete);

        this.add(new JSeparator());

        jmenuItem_selectAll = new JMenuItem("select all");
        jmenuItem_selectAll.setEnabled(false);
        jmenuItem_selectAll.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.selectAll();
            }
        });

        this.add(jmenuItem_selectAll);
    }

    public void add(JTextComponent jtextComponent)
    {
        jtextComponent.addMouseListener(new MouseAdapter()
        {
            public void mouseReleased(MouseEvent event)
            {
                if (event.getButton() == 3)
                {
                    processClick(event);
                }
            }
        });

        jtextComponent.getDocument().addUndoableEditListener(new UndoableEditListener()
        {
            public void undoableEditHappened(UndoableEditEvent event)
            {
                undoManager.addEdit(event.getEdit());
            }
        });
    }

    private void processClick(MouseEvent event)
    {
        jtextComponent = (JTextComponent)event.getSource();

        boolean enableUndo = undoManager.canUndo();
        boolean enableCut = false;
        boolean enableCopy = false;
        boolean enablePaste = false;
        boolean enableDelete = false;
        boolean enableSelectAll = false;

        String selectedText = jtextComponent.getSelectedText();
        String text = jtextComponent.getText();

        if (text != null)
        {
            if (text.length() > 0)
            {
                enableSelectAll = true;
            }
        }

        if (selectedText != null)
        {
            if (selectedText.length() > 0)
            {
                enableCut = true;
                enableCopy = true;
                enableDelete = true;
            }
        }

        try
        {
            if (clipboard.getData(DataFlavor.stringFlavor) != null)
            {
                enablePaste = true;
            }
        }
        catch (Exception exception)
        {
            System.out.println(exception);
        }

        jmenuItem_undo.setEnabled(enableUndo);
        jmenuItem_cut.setEnabled(enableCut);
        jmenuItem_copy.setEnabled(enableCopy);
        jmenuItem_paste.setEnabled(enablePaste);
        jmenuItem_delete.setEnabled(enableDelete);
        jmenuItem_selectAll.setEnabled(enableSelectAll);

        this.show(jtextComponent,event.getX(),event.getY());
    }
}
有关更多信息,请参阅

class Popup extends JPopupMenu
{
    final static long serialVersionUID = 0;

    Clipboard clipboard;

    UndoManager undoManager;

    JMenuItem jmenuItem_undo;
    JMenuItem jmenuItem_cut;
    JMenuItem jmenuItem_copy;
    JMenuItem jmenuItem_paste;
    JMenuItem jmenuItem_delete;
    JMenuItem jmenuItem_selectAll;

    JTextComponent jtextComponent;

    public Popup()
    {
        undoManager = new UndoManager();

        clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

        jmenuItem_undo = new JMenuItem("undo");
        jmenuItem_undo.setEnabled(false);
        jmenuItem_undo.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                undoManager.undo();
            }
        });

        this.add(jmenuItem_undo);

        this.add(new JSeparator());

        jmenuItem_cut = new JMenuItem("cut");
        jmenuItem_cut.setEnabled(false);
        jmenuItem_cut.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.cut();
            }
        });

        this.add(jmenuItem_cut);

        jmenuItem_copy = new JMenuItem("copy");
        jmenuItem_copy.setEnabled(false);
        jmenuItem_copy.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.copy();
            }
        });

        this.add(jmenuItem_copy);

        jmenuItem_paste = new JMenuItem("paste");
        jmenuItem_paste.setEnabled(false);
        jmenuItem_paste.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.paste();
            }
        });

        this.add(jmenuItem_paste);

        jmenuItem_delete = new JMenuItem("delete");
        jmenuItem_delete.setEnabled(false);
        jmenuItem_delete.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.replaceSelection("");
            }
        });

        this.add(jmenuItem_delete);

        this.add(new JSeparator());

        jmenuItem_selectAll = new JMenuItem("select all");
        jmenuItem_selectAll.setEnabled(false);
        jmenuItem_selectAll.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                jtextComponent.selectAll();
            }
        });

        this.add(jmenuItem_selectAll);
    }

    public void add(JTextComponent jtextComponent)
    {
        jtextComponent.addMouseListener(new MouseAdapter()
        {
            public void mouseReleased(MouseEvent event)
            {
                if (event.getButton() == 3)
                {
                    processClick(event);
                }
            }
        });

        jtextComponent.getDocument().addUndoableEditListener(new UndoableEditListener()
        {
            public void undoableEditHappened(UndoableEditEvent event)
            {
                undoManager.addEdit(event.getEdit());
            }
        });
    }

    private void processClick(MouseEvent event)
    {
        jtextComponent = (JTextComponent)event.getSource();

        boolean enableUndo = undoManager.canUndo();
        boolean enableCut = false;
        boolean enableCopy = false;
        boolean enablePaste = false;
        boolean enableDelete = false;
        boolean enableSelectAll = false;

        String selectedText = jtextComponent.getSelectedText();
        String text = jtextComponent.getText();

        if (text != null)
        {
            if (text.length() > 0)
            {
                enableSelectAll = true;
            }
        }

        if (selectedText != null)
        {
            if (selectedText.length() > 0)
            {
                enableCut = true;
                enableCopy = true;
                enableDelete = true;
            }
        }

        try
        {
            if (clipboard.getData(DataFlavor.stringFlavor) != null)
            {
                enablePaste = true;
            }
        }
        catch (Exception exception)
        {
            System.out.println(exception);
        }

        jmenuItem_undo.setEnabled(enableUndo);
        jmenuItem_cut.setEnabled(enableCut);
        jmenuItem_copy.setEnabled(enableCopy);
        jmenuItem_paste.setEnabled(enablePaste);
        jmenuItem_delete.setEnabled(enableDelete);
        jmenuItem_selectAll.setEnabled(enableSelectAll);

        this.show(jtextComponent,event.getX(),event.getY());
    }
}

为了实施它,

Popup popup = new Popup();

JTextArea jtextArea;
JTextField jtextField;

popup.add(jtextArea);
popup.add(jtextField);

为了实施它,

Popup popup = new Popup();

JTextArea jtextArea;
JTextField jtextField;

popup.add(jtextArea);
popup.add(jtextField);

好极了这正是我想要的。对于任何新手,将其作为新文件添加到您的项目中,然后在txt组件上,说出如下内容:txtDescription.addMouseListener(newContextMenuMouseListener());太好了,谢谢分享。我用你们的课堂来回答:太棒了!这正是我想要的。对于任何新手,将其作为新文件添加到您的项目中,然后在txt组件上,说出如下内容:txtDescription.addMouseListener(newContextMenuMouseListener());太好了,谢谢分享。我在这里用你们的课堂来回答: