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
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:
- click click listener on your field
- when clicking to check or it is the right mouse button,
- 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(); } } } } }
|