我正在使用Netbeans開發將在Windows中使用的應用程序。我注意到我無法右鍵單擊來複制或粘貼。我怎樣才能啓用它? (我使用基本的Swing控件,如JText和JTextArea中。)右鍵單擊以複製並粘貼到Java
4
A
回答
12
Why right click is not working on java application?
我不會創造新的複製,剪切,粘貼,撤消&選擇所有的行動,因爲這些已經各自的ActionMap中內部存在零件。我只是這樣做:
Action copyAction = textField.getActionMap().get("copy");
Action cutAction = textField.getActionMap().get("cut");
Action pasteAction = textField.getActionMap().get("paste");
Action undoAction = textField.getActionMap().get("undo");
Action selectAllAction = textField.getActionMap().get("selectAll");
popup.add (undoAction);
popup.addSeparator();
popup.add (cutAction);
popup.add (copyAction);
popup.add (pasteAction);
popup.addSeparator();
popup.add (selectAllAction);
return popup;
這樣你就不會重新創建更多已寫入的代碼。除此之外,我會遵循這個例子。
1
的評論,
是否與操作系統交互?我想從我的Java應用程序複製的東西,貼在記事本..
何苦用戶manuallly複製粘貼,爲什麼textarea的內容不寫入一個文本文件?
+1
長篇故事......但用戶想自己做,而不打開文本文件。 :) – averageman
1
final int colx;
final int rowy;
final String val1;
colx = CFDTable.getSelectedColumn();
rowy = CFDTable.getSelectedRow();
val1 = (String) CFDTable.getValueAt(rowy, colx);
JPopupMenu jPopupMenu = new javax.swing.JPopupMenu();
jPopupMenu.setName("jPopupMenu");
CFDTable.setComponentPopupMenu(jPopupMenu);
JMenuItem jMenuItem = new javax.swing.JMenuItem();
jMenuItem.setText("Copy"); // NOI18N
jMenuItem.setName("jMenuItem"); // NOI18N
jPopupMenu.add(jMenuItem);
jMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
StringSelection entry = new StringSelection(val1);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(entry, entry);
}
});
0
任何JTextComponent的完整工作模型,包括非功能性操作以及在文本選擇狀態下啓用/禁用菜單項。
private JMenuItem composeMenuItemFromActionOfComponent(String actionTag, JComponent component, String text, String idTag){
Action action = component.getActionMap().get(actionTag);
JMenuItem menuItem = new JMenuItem(action);
menuItem.setText(text);
menuItem.putClientProperty("id",idTag);
if(action == null)
menuItem.setEnabled(false);
return menuItem;
}
private void addTextMenuItems(JTextComponent textField){
final JPopupMenu popup = new JPopupMenu();
if(textField.isEditable()) {
popup.add(composeMenuItemFromActionOfComponent("undo", textField, "Undo", "undo"));
popup.addSeparator();
}
popup.add (composeMenuItemFromActionOfComponent(DefaultEditorKit.copyAction,textField,"Copy", "copy"));
if(textField.isEditable()) {
popup.add(composeMenuItemFromActionOfComponent(DefaultEditorKit.cutAction, textField, "Cut", "cut"));
popup.add(composeMenuItemFromActionOfComponent(DefaultEditorKit.pasteAction, textField, "Paste", "paste"));
popup.addSeparator();
}
popup.add (composeMenuItemFromActionOfComponent(DefaultEditorKit.selectAllAction,textField,"Select All", "select_all"));
textField.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {
if(e.isPopupTrigger()) {
boolean isTextSelected = textField.getSelectedText() != null;
for(MenuElement element : popup.getSubElements()){
JMenuItem menuItem = ((JMenuItem) element);
if(menuItem.getAction() != null && menuItem.getAction().isEnabled()) {
if (isTextSelected){
menuItem.setEnabled(true);
}else if (!(menuItem.getClientProperty("id").equals("select_all")
|| menuItem.getClientProperty("id").equals("undo")))
menuItem.setEnabled(false);
}
if(menuItem.getClientProperty("id").equals("paste")){
boolean isPastAvailable = false;
for(DataFlavor flavor : Toolkit.getDefaultToolkit().getSystemClipboard().getAvailableDataFlavors()){
if(flavor.getRepresentationClass() == String.class){
isPastAvailable = true;
break;
}
}
menuItem.setEnabled(isPastAvailable);
}
}
e.getComponent().requestFocus();
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
});
}
0
靜態類,即時添加常規彈出菜單到文本框。
只需調用JTextFieldRegularPopupMenu.addTo(jTextFieldObj);
import javax.swing.*;
import java.awt.event.ActionEvent;
import javax.swing.JPopupMenu;
import javax.swing.undo.*;
public class JTextFieldRegularPopupMenu {
public static void addTo(JTextField txtField)
{
JPopupMenu popup = new JPopupMenu();
UndoManager undoManager = new UndoManager();
txtField.getDocument().addUndoableEditListener(undoManager);
Action undoAction = new AbstractAction("Undo") {
@Override
public void actionPerformed(ActionEvent ae) {
if (undoManager.canUndo()) {
undoManager.undo();
}
else {
JOptionPane.showMessageDialog(null,
"Undoable: " + undoManager.canUndo() ,
"Undo Status",
JOptionPane.INFORMATION_MESSAGE);
}
}
};
Action copyAction = new AbstractAction("Copy") {
@Override
public void actionPerformed(ActionEvent ae) {
txtField.copy();
}
};
Action cutAction = new AbstractAction("Cut") {
@Override
public void actionPerformed(ActionEvent ae) {
txtField.cut();
}
};
Action pasteAction = new AbstractAction("Paste") {
@Override
public void actionPerformed(ActionEvent ae) {
txtField.paste();
}
};
Action selectAllAction = new AbstractAction("Select All") {
@Override
public void actionPerformed(ActionEvent ae) {
txtField.selectAll();
}
};
popup.add (undoAction);
popup.addSeparator();
popup.add (cutAction);
popup.add (copyAction);
popup.add (pasteAction);
popup.addSeparator();
popup.add (selectAllAction);
txtField.setComponentPopupMenu(popup);
}
}
相關問題
- 1. VBA如何使用右鍵單擊複製並粘貼到用戶窗體中?
- 2. 禁用複製/粘貼/右鍵單擊mvc文本框
- 3. AppleScript的複製和粘貼文件,用鼠標右鍵單擊
- 4. 如何禁用剪切,複製粘貼並右鍵單擊所有WPF表單
- 5. 複製 - 粘貼剪貼板(右鍵菜單) - Google Chrome
- 6. 複製並粘貼到vba
- 7. 複製並粘貼到vi
- 8. 點擊鼠標右鍵點擊火焰事件並粘貼
- 9. 編輯javascript代碼以啓用右鍵單擊並在網頁上覆制粘貼
- 10. 捕獲複製粘貼鍵
- 11. 右鍵單擊剪切/粘貼更新表單驗證
- 12. Android複製並粘貼TextView
- 13. 複製並粘貼在QTableView
- 14. 用c複製並粘貼#
- 15. Livecode Datagrid複製並粘貼
- 16. 宏 - 複製並粘貼
- 17. iOS複製並粘貼
- 18. 複製並粘貼多次
- 19. Excel VBA - 複製並粘貼
- 20. GWT - 複製並粘貼ZeroClipboard
- 21. 複製並粘貼Excel宏
- 22. VBA複製並粘貼
- 23. 複製並粘貼值
- 24. 使用右鍵單擊上下文菜單粘貼到Silverlight(4.0)從剪貼板到主動控制
- 25. 從外部複製並粘貼到vim
- 26. 複製文本並粘貼到UFT
- 27. 如何複製並粘貼到Git Bash
- 28. 複製並粘貼到在線表格
- 29. 複製並粘貼到VBA宏中
- 30. 複製並粘貼到WMware Fusion 8.5
它是否與操作系統交互?我想從Java應用程序中複製一些內容並粘貼到記事本中... – averageman
是的。默認操作使用系統的剪貼板類,以便在Java Swing中的任何應用程序之間進行復制和粘貼。 – chubbsondubs
謝謝!我會稍後嘗試! – averageman