JavaでJTextAreaの切り取り・コピー・貼り付け機能を無効化する方法
JTextAreaとは
JTextAreaはJTextComponentクラスのサブクラスであり、テキストを表示したりユーザーのテキスト入力を受け付けたりするための複数行テキストコンポーネントです。JTextAreaの機能を実装する際には、キャレット(カーソル)の移動などを監視するCaretListenerインターフェースを利用できます。
デフォルトでは、JTextAreaクラスは切り取り(カット)、コピー、貼り付け(ペースト)の各機能を標準でサポートしています。しかし、アプリケーションの要件によっては、これらの操作を禁止したいケースもあります。そのような場合は、JTextAreaクラスのgetInputMap().put()メソッドを使うことで、該当するショートカットキーの動作を無効化(オフ)できます。
具体的には、以下のようにKeyStroke.getKeyStroke()でキーの組み合わせを指定し、アクション名として「none」をマッピングします。
- 切り取りの無効化:
KeyStroke.getKeyStroke("control X") - コピーの無効化:
KeyStroke.getKeyStroke("control C") - 貼り付けの無効化:
KeyStroke.getKeyStroke("control V")
「none」をアクションとして登録すると、対応するキーストロークが押されても何も処理されなくなるため、結果的に各機能が無効になります。
実装例
以下は、ボタンをクリックするとそれぞれ切り取り・コピー・貼り付け機能を個別に無効化できるサンプルプログラムです。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTextAreaCutCopyPasteDisableTest extends JFrame {
private JTextArea textArea;
private JButton cut, copy, paste;
private JPanel panel;
public JTextAreaCutCopyPasteDisableTest() {
setTitle("JTextAreaCutCopyPasteDisable Test");
setLayout(new BorderLayout());
panel = new JPanel();
textArea = new JTextArea();
// 切り取りを無効化
cut = new JButton("Cut");
cut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
textArea.getInputMap().put(KeyStroke.getKeyStroke("control X"), "none"); // disable cut
}
});
panel.add(cut);
// コピーを無効化
copy = new JButton("Copy");
copy.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
textArea.getInputMap().put(KeyStroke.getKeyStroke("control C"), "none"); // disable copy
}
});
panel.add(copy);
// 貼り付けを無効化
paste = new JButton("Paste");
paste.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
textArea.getInputMap().put(KeyStroke.getKeyStroke("control V"), "none"); // disable paste
}
});
panel.add(paste);
add(panel, BorderLayout.NORTH);
add(new JScrollPane(textArea), BorderLayout.CENTER);
setSize(400, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JTextAreaCutCopyPasteDisableTest();
}
}
コードのポイント
getInputMap()は、コンポーネントが受け取るキー入力とアクションの対応関係を管理するマップを返します。put(KeyStroke, "none")により、特定のショートカットキーを「何もしない」アクションに上書きします。- Ctrl+X / Ctrl+C / Ctrl+V のいずれか、またはすべてを必要に応じて無効化できます。
実行結果
プログラムを実行すると、上部に3つのボタン(Cut / Copy / Paste)、中央にスクロール可能なテキストエリアが配置されたウィンドウが表示されます。ボタンをクリックした後、テキストエリア内で対応するショートカットキーを押しても、その操作は実行されなくなります。

-
Androidでコピー&ペーストを使う方法|テキスト・リンク・切り取り操作を徹底解説
カット/コピー&ペーストを発明したラリー・テスラー氏に、世界は永遠に感謝すべきでしょう。シンプルでありながら不可欠なこの機能は、コンピューティングに欠かせない存在です。コピー&ペーストのないデジタルの世界など想像できません。同じメッセージを何度も入力するのはストレスですし、コピー&ペーストなしで複数のデジタルデータを作成するのはほぼ不可能でしょう。 時代とともに、スマートフォンは日常的なテキスト入力の主役となりました。そのため、AndroidやiOSなどモバイルOSにコピー&ペースト機能がなければ、日々の作業は成り立ちません。 本記事では、テキストをある場所から別の場所へコピー&ペーストするさ
-
Chromebookでのコピー&ペースト方法まとめ|ショートカットキーからクリップボード管理まで徹底解説
Chromebookは、軽量なOSを搭載している点と、Androidアプリをほぼ問題なく動作させられる点から、人気が高まり続けています。ノートパソコンユーザーは、映画鑑賞・ゲーム・メールの送受信・文書の読み書きといった比較的軽い作業が中心のユーザーと、本格的なプロ向けの作業を行うユーザーに大別されます。ヘビーユースにはWindowsノートPCが適していますが、Windows Core OS搭載機が登場するまでの間、軽めの作業用途にはChromebookが最適な選択肢と言えるでしょう。 ただし、多くの方はWindowsノートPCの操作に慣れているため、独自のコマンドや操作体系を持つChromeb