クリップボードでテキストを受け渡せるLabelの作成
では、クリップボード利用の例として、「表示テキストをクリップボードの間とやり取りできるラベル」を作成してみましょう。
package jp.allabout;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;
public class SampleApp extends JFrame {
private JLabel label;
public SampleApp(){
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addWindowListener(new WindowAdapter(){
public void windowActivated(WindowEvent e){
label.setText(getTextFromClip());
}
public void windowDeactivated(WindowEvent e){
setTextToClip(label.getText());
}
});
this.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
String msg = label.getText() + e.getKeyChar();
label.setText(msg);
}
});
label = new JLabel();
label.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
if (e.getClickCount() == 2){
label.setText("");
}
}
});
this.add(label,BorderLayout.CENTER);
label.setText(this.getTextFromClip());
}
public String getTextFromClip(){
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable object = clipboard.getContents(null);
String str = "";
try {
str = (String)object.getTransferData(DataFlavor.stringFlavor);
} catch(UnsupportedFlavorException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
public void setTextToClip(String str){
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection = new StringSelection(str);
clipboard.setContents(selection, null);
}
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
}
ウインドウが選択されると、コピーしておいたテキストが表示される。他のソフトに切り替えると、最後に表示されていたテキストがクリップボードにコピーされて渡される。 |
ウインドウをアクティブにすると、クリップボードに入っているテキストをウインドウ内に表示します。また他のアプリケーションのウインドウをクリックして切り替えると、ウインドウに表示されていたテキストがクリップボードに収められ渡されます。表示テキストの編集機能として、ダブルクリックするとテキストを初期化し、キーをタイプするとそのままテキストがラベルにタイプできるようにしてあります。
ここでは、getTextFromClipとsetTextToClipで、クリップボードからのテキストの取得と、クリップボードへのテキストの保管を行っています。それ以外はそれほど難しい処理ではありません。クリップボード関係のメソッドは、そのまま他に移動して使えますので、それぞれで応用を考えてみるとよいでしょう。