Why does nothing happen in my application when right-clicking in the text field ( JTextField )? Need to hang your listener? If yes, can I see an example somewhere? I would like the right click to cause standard pop-up menus (copy, paste, etc.).

  • would you post the code ... - Zowie
  • Any action must hang a listener ... - Gorets 5:02 pm
  • The code is too big. - Jakeroid 5:26 pm

3 answers 3

Yes, you don’t need a code, just if you don’t have it there, or you don’t know how to do it (see examples), you should:

  1. click click listener on your field
  2. when clicking to check or it is the right mouse button,
  3. in the event handler to describe the actions, I suppose, on the output pop-up menu for editing
  • Is it even for "Copy - Paste" need? - Jakeroid
  • yes, you are an architect and a developer of your program, if I'm not mistaken, keyboard shortcuts work for the programs CTR + C, + M =) - Gorets
  • Okay, I just thought that copying / pasting a menu could be easier as it was. - Jakeroid

Something like this:

 textField.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3){ //Ссли Π½Π°ΠΆΠ°Ρ‚Π° правая ΠΊΠ½ΠΎΠΏΠΊΠ°--Ρ‚ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС Π΅Π΅ наТатия //PS BUTTON1--ЛСвая ΠΊΠ½ΠΎΠΏΠΊΠ°, BUTTON2--колСсо ΠΌΡ‹ΡˆΠΈ } } } 
  • plus for efforts, I'm lazy)) - Gorets

There is no standard menu in swing. You need to sculpt it yourself! Here is an example ( link text ):

 import javax.swing.*; import javax.swing.undo.UndoManager; import javax.swing.text.JTextComponent; import javax.swing.text.Document; import java.util.HashMap; import java.util.List; import java.util.Iterator; import java.awt.event.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.DataFlavor; import java.awt.*; public class DocumentUndoManager { private static DocumentUndoManager instanse; private UndoActionListener listener; private HashMap items = new HashMap(); private EditPopup popup; private DocumentUndoManager() { listener = new UndoActionListener(); popup = new EditPopup(); } public static DocumentUndoManager getInstance() { if (instanse==null) { instanse = new DocumentUndoManager(); } return instanse; } public void registerDocumentHolder(JTextComponent documentHolder) { //создаСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° UndoManager undo = new UndoManager(); //Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Π΅Π³ΠΎ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСкстового поля items.put(documentHolder, undo); //ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ модСль Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° такстового поля Document doc = documentHolder.getDocument(); //добавляСм ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° doc.addUndoableEditListener(undo); //добавляСм ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ клавиш (ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ctrl+z) documentHolder.addKeyListener(listener); //добавляСм ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡ‹ΡˆΠΈ (ΠΎΠ½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ) documentHolder.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { //Ссли Π½Π°ΠΆΠ°Ρ‚Π° правая ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ if (e.getButton()==MouseEvent.BUTTON3) { //if (e.isPopupTrigger()) { // <-- Π² линуксС (Fedora Core 5, KDE 3.5.3) это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ //устанавливаСм тСкстовый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для мСню popup.setDocumentHolder((JTextComponent) e.getSource()); //ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ мСню popup.show((JTextComponent)e.getSource(), e.getX(), e.getY()); } } }); } /** * ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ для тСкстовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ * @param documentHolders список ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (ΠΈΠ· JTextComponent) */ public void clearChangeHistory(List documentHolders) { for (Iterator iterator = documentHolders.iterator(); iterator.hasNext();) { JTextComponent textComponent = (JTextComponent) iterator.next(); UndoManager manager = (UndoManager) items.get(textComponent); manager.discardAllEdits(); } } class EditPopup extends JPopupMenu { private JMenuItem copy; private JMenuItem cut; private JMenuItem paste; private JMenuItem undo; private JTextComponent documentHolder = null; public EditPopup() { copy = new JMenuItem("ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ"); copy.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (documentHolder!=null) { documentHolder.copy(); } } }); cut = new JMenuItem("Π’Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ"); cut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (documentHolder!=null) { documentHolder.cut(); } } }); paste = new JMenuItem("Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ"); paste.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (documentHolder!=null) { documentHolder.paste(); } } }); undo = new JMenuItem("ΠžΡ‚ΠΌΠ΅Π½Π°"); undo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (documentHolder!=null) { UndoManager manager = (UndoManager) items.get(documentHolder); if (manager.canUndo()) { manager.undo(); } } } }); add(copy); add(cut); add(paste); addSeparator(); add(undo); } public void setDocumentHolder(JTextComponent documentHolder) { this.documentHolder = documentHolder; //устанавливаСм Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² "ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" ΠΈ "Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ" if (documentHolder.getSelectedText()!= null && documentHolder.getSelectedText()!= null) { copy.setEnabled(true); cut.setEnabled(true); } else { copy.setEnabled(false); cut.setEnabled(false); } //устанавливаСм Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Π° "Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ" Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable contents = clipboard.getContents(this); DataFlavor flavor = DataFlavor.stringFlavor; if (contents!=null && contents.isDataFlavorSupported(flavor)) { paste.setEnabled(true); } else { paste.setEnabled(false); } //устанавливаСм Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Π° "ΠΎΡ‚ΠΌΠ΅Π½Π°" UndoManager manager = (UndoManager) items.get(documentHolder); if (manager.canUndo()) { undo.setEnabled(true); } else { undo.setEnabled(false); } } } class UndoActionListener extends KeyAdapter { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_Z && e.isControlDown()) { UndoManager manager = (UndoManager) items.get(e.getSource()); if (manager.canUndo()) { manager.undo(); } } } } }