为什么右键单击不适用于java应用程序?

我做了一个基于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应用程序中,您必须自己添加上下文菜单。 有关详细信息,请参阅此文章 。

 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);