私はNetbeansを使用してWindowsで使用されるアプリケーションを開発しています。右クリックしてコピーまたは貼り付けすることができないことに気付きました。どうすればこの機能を有効にできますか? (私はそのような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
、
それは、オペレーティングシステムと対話していますか?私はなぜ、なぜテキストファイルにテキストエリアの内容を記述しないで、コピー&ペーストをmanualllyするユーザーをわざわざ
..私のJavaアプリケーションから何かをコピーしてメモ帳に貼り付けたいですか?
+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. 値としてコピー&ペースト
- 2. Java:コピー・ペースト・コードなしで再試行する方法は?
- 3. コピー&ペーストでvi
- 4. カット/ペーストはExcelのコピー/ペーストのように動作します
- 5. txtファイルにコピー、ペースト、エコーします。
- 6. コピー&ペースト
- 7. "for .... next"を使用してペースト範囲をコピーします。
- 8. Androidでコピー&ペーストonclick
- 9. 右クリックしてC#WPFデータグリッドのコンテンツメニューをコピー
- 10. 号(コピー&ペースト)
- 11. Qt "コピー/ペースト/カット"
- 12. iOSコピー&ペースト
- 13. Excel Vbaコピー&ペースト
- 14. CKエディタ - コピー&ペースト
- 15. コピー&ペーストVBA
- 16. ブックマークレット - 右クリックしますか?
- 17. イメージを右クリックしてシミュレート
- 18. コンテキストメニューを右クリックして
- 19. RobotFrameworkでのコピー/ペーストのテスト
- 20. コピー&ペーストは、ここでworksheet_change
- 21. コピー&ペースト私は思っていました
- 22. コピー&ペーストINCLUDINGブックマークVBA
- 23. コピー&ペースト失敗vba
- 24. Silverlightリッチテキストボックス - コピー&ペーストhtml
- 25. IBMメインフレームのコピー/ペースト
- 26. 剣道図コピー&ペースト
- 27. jquery install - コピー/ペーストとダウンロードしたリンクファイル
- 28. ループを使用したマクロのコピー&ペースト
- 29. セレン(Java)オートメーションを使用してFirefoxブラウザで右クリックできません
- 30. 2つの列を比較し、vbaを使用してペーストをコピーします。
オペレーティングシステムと対話しますか? Javaアプリケーションから何かをコピーしてメモ帳に貼り付けたいのですが... – averageman
はい。デフォルトのアクションでは、システムのクリップボードクラスを使用して、Java Swingで動作するすべてのアプリケーション間でコピーおよび貼り付けを行います。 – chubbsondubs
ありがとう!私は後でそれを試してみましょう! – averageman