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