1 21 22 package com.sshtools.ui.swing; 23 24 import java.awt.Toolkit ; 25 import java.awt.datatransfer.Clipboard ; 26 import java.awt.datatransfer.ClipboardOwner ; 27 import java.awt.datatransfer.DataFlavor ; 28 import java.awt.datatransfer.StringSelection ; 29 import java.awt.datatransfer.Transferable ; 30 import java.awt.event.ActionEvent ; 31 import java.awt.event.FocusEvent ; 32 import java.awt.event.FocusListener ; 33 import java.awt.event.KeyEvent ; 34 import java.awt.event.MouseAdapter ; 35 import java.awt.event.MouseEvent ; 36 37 import javax.swing.AbstractAction ; 38 import javax.swing.Action ; 39 import javax.swing.JPopupMenu ; 40 import javax.swing.JTextField ; 41 import javax.swing.KeyStroke ; 42 import javax.swing.SwingUtilities ; 43 import javax.swing.text.Document ; 44 45 50 public class XTextField extends JTextField implements ClipboardOwner { 51 private JPopupMenu popup; 52 private Action cutAction; 53 private Action copyAction; 54 private Action pasteAction; 55 private Action deleteAction; 56 private Action selectAllAction; 57 58 61 public XTextField() { 62 this(null, null, 0); 63 } 64 65 70 public XTextField(String text) { 71 this(null, text, 0); 72 } 73 74 79 public XTextField(int columns) { 80 this(null, null, columns); 81 } 82 83 89 public XTextField(String text, int columns) { 90 this(null, text, columns); 91 } 92 93 100 public XTextField(Document doc, String text, int columns) { 101 super(doc, text, columns); 102 initXtensions(); 103 } 104 105 111 public void lostOwnership(Clipboard clipboard, Transferable contents) { 112 } 113 114 private void showPopup(int x, int y) { 115 requestFocus(); 117 118 if (popup == null) { 120 popup = new JPopupMenu ("Clipboard"); 121 popup.add(cutAction = new CutAction()); 122 popup.add(copyAction = new CopyAction()); 123 popup.add(pasteAction = new PasteAction()); 124 popup.add(deleteAction = new DeleteAction()); 125 popup.addSeparator(); 126 popup.add(selectAllAction = new SelectAllAction()); 127 } 128 129 cutAction.setEnabled(isEnabled() && (getSelectedText() != null)); 131 copyAction.setEnabled(isEnabled() && (getSelectedText() != null)); 132 deleteAction.setEnabled(isEnabled() && (getSelectedText() != null)); 133 pasteAction.setEnabled(isEnabled() && Toolkit.getDefaultToolkit() 134 .getSystemClipboard() 135 .getContents(this) 136 .isDataFlavorSupported(DataFlavor.stringFlavor)); 137 selectAllAction.setEnabled(isEnabled()); 138 139 popup.show(this, x, y); 141 } 142 143 private void initXtensions() { 144 addMouseListener(new MouseAdapter () { 145 public void mouseClicked(MouseEvent evt) { 146 if (SwingUtilities.isRightMouseButton(evt)) { 147 showPopup(evt.getX(), evt.getY()); 148 } 149 } 150 }); 151 addFocusListener(new FocusListener () { 152 public void focusGained(FocusEvent evt) { 153 XTextField.this.selectAll(); 154 } 155 156 public void focusLost(FocusEvent evt) { 157 } 160 }); 161 } 162 163 class CopyAction extends AbstractCopyAction { 165 public void actionPerformed(ActionEvent evt) { 166 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection (getText()), XTextField.this); 167 } 168 } 169 170 class CutAction extends AbstractAction { 171 public CutAction() { 172 putValue(Action.NAME, "Cut"); 173 putValue(Action.SMALL_ICON, new ResourceIcon(XTextField.class, "/images/actions/cut-16x16.png")); 174 putValue(Action.SHORT_DESCRIPTION, "Cut selection"); 175 putValue(Action.LONG_DESCRIPTION, "Cut the selection from the text and place it in the clipboard"); 176 putValue(Action.MNEMONIC_KEY, new Integer ('u')); 177 putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK)); 178 } 179 180 public void actionPerformed(ActionEvent evt) { 181 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection (getText()), XTextField.this); 182 setText(""); 183 } 184 } 185 186 class PasteAction extends AbstractAction { 187 public PasteAction() { 188 putValue(Action.NAME, "Paste"); 189 putValue(Action.SMALL_ICON, new ResourceIcon(XTextField.class, "/images/actions/paste-16x16.png")); 190 putValue(Action.SHORT_DESCRIPTION, "Paste clipboard content"); 191 putValue(Action.LONG_DESCRIPTION, "Paste the clipboard contents to the current care position or replace the selection"); 192 putValue(Action.MNEMONIC_KEY, new Integer ('p')); 193 putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK)); 194 } 195 196 public void actionPerformed(ActionEvent evt) { 197 Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this); 198 199 if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) { 200 try { 201 setText(t.getTransferData(DataFlavor.stringFlavor).toString()); 202 } catch (Exception e) { 203 } 205 } 206 } 207 } 208 209 class DeleteAction extends AbstractAction { 210 public DeleteAction() { 211 putValue(Action.NAME, "Delete"); 212 putValue(Action.SMALL_ICON, new ResourceIcon(XTextField.class, "/images/actions/delete-16x16.png")); 213 putValue(Action.SHORT_DESCRIPTION, "Delete selection"); 214 putValue(Action.LONG_DESCRIPTION, "Delete the selection from the text"); 215 putValue(Action.MNEMONIC_KEY, new Integer ('d')); 216 putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK)); 217 } 218 219 public void actionPerformed(ActionEvent evt) { 220 setText(""); 221 } 222 } 223 224 class SelectAllAction extends AbstractSelectAllAction { 225 public void actionPerformed(ActionEvent evt) { 226 selectAll(); 227 } 228 } 229 } 230 | Popular Tags |