|
エクスプローラからドラッグ&ドロップされたアイコンのファイル名を表示する。 |
ドラッグ&ドロップのイベントを扱うには、DropTargetListener インターフェースを実装する必要があります。このプログラムの場合は、DropTargetListener を実装している DropTargetAdapter クラスを継承したサブクラスを用いています。
ドラッグ&ドロップのイベントでは、このリスナーと、主に Transferable クラス、DataFlavor クラスを使います。
この例ではコンストラクタの中で JTextArea に DropTarget を登録しています。
(例)
public void drop(DropTargetDropEvent e) {
try {
Transferable transfer = e.getTransferable();
if (transfer.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
java.util.List fileList =
(java.util.List) (transfer.getTransferData(DataFlavor.javaFileListFlavor));
setFileName(fileList);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import javax.swing.*;
/*
* Sample4.java
* 2003/07/19
* kota
*/
/**
* @author kota
*/
public class Sample4 extends JFrame {
private JTextArea textArea;
public static void main(String[] args) {
Sample4 sample4 = new Sample4();
sample4.setVisible(true);
}
public Sample4() {
super("Sample4");
changeLookAndFeel();
Container con = getContentPane();
con.setLayout(new BorderLayout());
textArea = new JTextArea(5, 50);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
con.add(scrollPane, BorderLayout.CENTER);
pack();
DropTarget target = new DropTarget(textArea, new MyDropTargetAdapter());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setCenterLocation(this);
}
/**
* リスト内のファイル名を、textAreaに表示する。
* @param fileList
*/
private void setFileName(java.util.List fileList) {
textArea.setText("");
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < fileList.size(); i++) {
File file = (File) fileList.get(i);
buffer.append(file.getAbsolutePath());
buffer.append("\n");
}
textArea.setText(buffer.toString());
}
/**
* ドラッグ&ドロップイベントを受け取る。
* @author kota
*/
private class MyDropTargetAdapter extends DropTargetAdapter {
public void drop(DropTargetDropEvent e) {
try {
Transferable transfer = e.getTransferable();
if (transfer.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
java.util.List fileList =
(java.util.List) (transfer.getTransferData(
DataFlavor.javaFileListFlavor));
setFileName(fileList);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
/**
* Look & Feel をOSのものに変更
*/
private void changeLookAndFeel() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* ウィンドウをディスプレイの中心に配置する。
* @param frame ウィンドウ
*/
private void setCenterLocation(JFrame frame) {
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - frame.getWidth()) / 2;
int y = (d.height - frame.getHeight()) / 2;
frame.setLocation(x, y);
}
}
SITE TOP BGM : Cornelius - CM2