テキストエリアに対してクリップボードを経由でコピーやペーストをプログラムから行う
テキストエリアに対してクリップボードを経由でコピーやペーストをプログラムから行う方法について解説します。作成したアプリケーションで追加したメニューなどからコピーやペーストを行う場合などに利用できます。
(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)
コピー、カット、ペーストを行う
テキストエリアに対してプログラムからコピー、カット、ペーストを行うためのメソッドが JTextArea クラスの親クラスである JTextComponent クラスでそれぞれ定義されています。
public void copy()
関連するテキスト・モデル内の現在選択されている領域をシステム・クリップボードに転送して、テキスト・モデル内のコンテンツはそのまま残します。 現在の選択領域は元のまま残ります。 選択領域がnullの場合には何も行いません。
public void cut()
関連するテキスト・モデル内の現在選択されている領域をシステム・クリップボードに転送して、モデルからコンテンツを削除します。 現在の選択領域は取り消されます。 選択領域がnullの場合には何も行いません。
public void paste()
システム・クリップボードのコンテンツを関連するテキスト・モデルに転送します。 関連するビュー内に選択領域があるときは、クリップボードのコンテンツで置き換えられます。 選択領域がないときは、クリップボードのコンテンツは関連するビュー内の現在の挿入位置の前に挿入されます。 クリップボードが空の場合には何も行いません。
copy メソッドを使うとテキストエリアの中で選択されている部分をクリップボードにコピーします。 cut メソッドを使うとテキストエリアの中で選択されている部分をクリップボードにコピーする点は同じですが選択部分をテキストエリアから削除します。 paste メソッドを使うとクリップボードにコピーされた値をテキストエリアのキャレットがある位置に挿入します。
実際の使い方は次のようになります。
JTextArea textarea = new JTextArea("Hello!"); textarea.cut(); textarea.copy(); textarea.paste();
より具体的な利用方法は次のサンプルを参照して下さい。
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample17_1.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JButton; import java.awt.Container; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; class JSample17_1 extends JFrame implements ActionListener{ JTextArea textarea1; JTextArea textarea2; public static void main(String args[]){ JSample17_1 frame = new JSample17_1("MyTitle"); frame.setVisible(true); } JSample17_1(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); textarea1 = new JTextArea("APPLE", 5, 40); JButton button1_1 = new JButton("Copy"); button1_1.addActionListener(this); button1_1.setActionCommand("Text1_Copy"); JButton button1_2 = new JButton("Cut"); button1_2.addActionListener(this); button1_2.setActionCommand("Text1_Cut"); JButton button1_3 = new JButton("Paste"); button1_3.addActionListener(this); button1_3.setActionCommand("Text1_Paste"); JPanel button_panel_1 = new JPanel(); button_panel_1.add(button1_1); button_panel_1.add(button1_2); button_panel_1.add(button1_3); textarea2 = new JTextArea("orange", 5, 40); JButton button2_1 = new JButton("Copy"); button2_1.addActionListener(this); button2_1.setActionCommand("Text2_Copy"); JButton button2_2 = new JButton("Cut"); button2_2.addActionListener(this); button2_2.setActionCommand("Text2_Cut"); JButton button2_3 = new JButton("Paste"); button2_3.addActionListener(this); button2_3.setActionCommand("Text2_Paste"); JPanel button_panel_2 = new JPanel(); button_panel_2.add(button2_1); button_panel_2.add(button2_2); button_panel_2.add(button2_3); JPanel p = new JPanel(); p.add(textarea1); p.add(button_panel_1); p.add(textarea2); p.add(button_panel_2); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } public void actionPerformed(ActionEvent e){ String cmd = e.getActionCommand(); if (cmd.equals("Text1_Copy")){ textarea1.copy(); }else if (cmd.equals("Text1_Cut")){ textarea1.cut(); }else if (cmd.equals("Text1_Paste")){ textarea1.paste(); }else if (cmd.equals("Text2_Copy")){ textarea2.copy(); }else if (cmd.equals("Text2_Cut")){ textarea2.cut(); }else if (cmd.equals("Text2_Paste")){ textarea2.paste(); } } }
次のようにコンパイルを行います。
javac JSample17_1.java
コンパイルが終わりましたら実行します。
java JSample17_1
テキストエリアを 2 つ、ボタンを 6 つ追加しました。それぞれのボタンはすぐ上にあるテキストエリアに対するもので、コピー、カット、ペーストを行うためのボタンです。
例として上のテキストエリアに入力されているテキストの一部を選択してから上にあるボタンの中で "Copy" ボタンをクリックします。これで選択された部分のテキストがコピーされました。
下のテキストエリアに入力されているテキストのいずれかの位置をクリックしてキャレットを置いたら、下にあるボタンの中で "Paste" ボタンをクリックしてください。キャレットがあった位置に先ほどコピーしたテキストが挿入されました。
このようにテキストエリアに入力されたテキストの一部をコピーしたり他のテキストエリアなどにペーストしたりすることができます。
-- --
テキストエリアに対してクリップボードを経由でコピーやペーストをプログラムから行う方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。