Java:文字列のcopy&paste処理にClipboard

 

だいぶ暖かくなってきましたね。
マイド、管理人イガジーです。

コピー&ペースト(コピペ)は、マウス操作やキー操作でよく使うと思います。

SHIFT+カーソルキー で文字列の範囲指定、
CTRL+C でコピー、
CTRL+V でペースト、
などは、Windowsだけでなく、Linux(Gnome)などでも使えます。

Javaで、このコピペをボタンなどに割り当てる場合には
Clipboard (java.awt.datatransfer.Clipboard) を使います。

具体例としては、初期化は
Clipboard clp=Toolkit.getDefaultToolkit().getSystemClipboard();という感じです。
フィールドに
TextArea tx;
があるとして、次の様なActionListenerで処理ができます。
class CpyC implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
StringSelection ss=new StringSelection(tx.getText());
clp.setContents(ss, ss);
}// actionPerformed
} // class CpyC
//
class PasteC implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
try {
tx.setText((String) clp.getData(DataFlavor.stringFlavor));
} catch (UnsupportedFlavorException e1) {
// e1.printStackTrace();
// do nothing
} catch (IOException e1) {
e1.printStackTrace();
}
}// actionPerformed
} // class PasteC
このActionListenerをボタンなどに割り当てます。
Button cpy=new Button("Copy");
Button pst=new Button("Paste");
cpy.addActionListener(new CpyC());
pst.addActionListener(new PasteC());
という感じです。

上記の例では、TextArea tx全体をコピペの対象にしています。

クリップポードには、文字列以外のものも入れられるので
ペースト時には、DataFlavor.stringFlavor で、文字列を指定しています。