DefaultEditorKitでポップアップメニューからコピー
Total: 12282
, Today: 4
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
DefaultEditorKit
を使って、JTextField
などでポップアップメニューを使ったコピー、貼り付け、切り取りを行います。
Screenshot
Advertisement
サンプルコード
// textField.setComponentPopupMenu(new TextFieldPopupMenu());
class TextFieldPopupMenu extends JPopupMenu {
private final Action cutAction = new DefaultEditorKit.CutAction();
private final Action copyAction = new DefaultEditorKit.CopyAction();
private final Action pasteAction = new DefaultEditorKit.PasteAction();
private final Action deleteAction = new AbstractAction("delete") {
@Override public void actionPerformed(ActionEvent e) {
Component c = getInvoker();
if (c instanceof JTextComponent) {
((JTextComponent) c).replaceSelection(null);
}
}
};
private final Action cut2Action = new AbstractAction("cut2") {
@Override public void actionPerformed(ActionEvent e) {
Component c = getInvoker();
if (c instanceof JTextComponent) {
((JTextComponent) c).cut();
}
}
};
protected TextFieldPopupMenu() {
super();
add(cutAction);
add(copyAction);
add(pasteAction);
add(deleteAction);
addSeparator();
add(cut2Action);
}
@Override public void show(Component c, int x, int y) {
if (c instanceof JTextComponent) {
JTextComponent tc = (JTextComponent) c;
boolean f = tc.getSelectionStart() != tc.getSelectionEnd();
cutAction.setEnabled(f);
copyAction.setEnabled(f);
deleteAction.setEnabled(f);
cut2Action.setEnabled(f);
super.show(c, x, y);
}
}
}
View in GitHub: Java, Kotlin解説
DefaultEditorKit.CopyAction
をポップアップメニューに追加してクリップボードを使ったコピーなどが可能になるよう設定- サンプルの
cut2
のように、JTextComponent#cut()
メソッドなどを使用する方法もある
- サンプルの
- サンプルを
Java Web Start
で起動した場合は、システム全体の共有クリップボードにはアクセス不可能でアプリケーション内部のみでのコピー、貼り付けとなる - ClipboardServiceでシステム全体の共有クリップボードにアクセスする