今週も引き続き次世代Java Plug-inのJNLPサポートについて解説していきます。今週取りあげるのはクリップボードへのアクセスです。
Swingでのコピー&ペーストは,Java SE 6完全攻略第29回で取りあげたjavax.swing.TransferHandlerクラスを使用します。とはいうものの,JTextAreaクラスなどは,TansferHandlerクラスの存在を意識することなくコピー&ペーストを行うことができます。
では,Java SE 6u10の新機能その11で作成した簡易エディターにコピー&ペーストの機能を付加してみましょう。
ここでは,メニューバーに新たに[Edit]メニューを作成し,[Cut],[Copy],[Paste]の三つの項目を付け加えました。
public class SimpleEditor extends JApplet {
private FileOpenService openService;
private FileSaveService saveService;
private JTextArea textArea;
private FileContents contents;
@Override
public void init() {
((JComponent)getContentPane()).setBorder(
new EmptyBorder(10, 10, 10, 10));
try {
// サービスの取得
openService = (FileOpenService)ServiceManager.lookup(
"javax.jnlp.FileOpenService");
saveService = (FileSaveService)ServiceManager.lookup(
"javax.jnlp.FileSaveService");
initMenuBar();
textArea = new JTextArea();
add(new JScrollPane(textArea));
} catch (UnavailableServiceException ex) {
// サービスが使用できない場合
JLabel label = new JLabel("サービスが使えません");
add(label);
}
}
private void initMenuBar() {
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
initFileMenu(menuBar);
initEditMenu(menuBar);
}
private void initFileMenu(JMenuBar menuBar) {
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("Open...");
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
openFile();
}
});
menu.add(openItem);
JMenuItem saveItem = new JMenuItem("Save");
saveItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
saveFile();
}
});
menu.add(saveItem);
JMenuItem saveAsItem = new JMenuItem("Save As...");
saveAsItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
saveAsFile();
}
});
menu.add(saveAsItem);
}
private void initEditMenu(JMenuBar menuBar) {
JMenu menu = new JMenu("Edit");
menuBar.add(menu);
// カット
JMenuItem cutItem = new JMenuItem("Cut");
cutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
textArea.cut();
}
});
menu.add(cutItem);
// コピー
JMenuItem copyItem = new JMenuItem("Copy");
copyItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
textArea.copy();
}
});
menu.add(copyItem);
// ペースト
JMenuItem pasteItem = new JMenuItem("Paste");
pasteItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
textArea.paste();
}
});
menu.add(pasteItem);
}
<<以下,省略>>
赤字の部分がコピー&ペーストを実行する部分です。JTextAreaクラスにはカット,コピー,ペーストを行うメソッドが提供されているので,それをコールしているだけです。