「Java/swing/サンプル/ドロップを受け取るサンプル(文字列、ファイル)」の編集履歴(バックアップ)一覧はこちら

Java/swing/サンプル/ドロップを受け取るサンプル(文字列、ファイル)」(2012/09/30 (日) 17:47:06) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*ドラッグアンドドロップのサンプル 1.ドロップを受け取るだけのサンプル(文字列、ファイル) ドラッグアンドドロップの入り口として、ドロップを受け取るだけのサンプルを書いてみました。 エクスプローラからファイルをドロップしたい!なんて場合も、この簡単なサンプルだけで十分です。 *** ポイント + ドロップイベントを受け取るには「DropTargetListener.drop」を実装します。 + 「DropTargetListener」は「DropTarget」に設定します。 ++ new DropTarget(コンポーネント, リスナー);を実行すると、DropTargetの内部でaddDropTargetListenerされます。 + ドロップすると1.で実装した「drop」が実行されます。 ++ 「DropTargetDropEvent.acceptDrop」でドロップを受け取る準備をします。 ++ 「DropTargetDropEvent.isDataFlavorSupported」で、受け取り可能なフレーバーを調べます。 +++ 標準では文字列用の「stringFlavor」、ファイル用の「javaFileListFlavor」、画像イメージ用の「imageFlavor」があります。 ++ 「DropTargetDropEvent.getTransferable」で転送クラスを取得します。 ++ 「Transferable.getTransferData」でドロップされたオブジェクトを受け取ります。 +++ ファイルは「List<File>」にキャストして操作するとよいです。 ++ 「DropTargetDropEvent.dropComplete」で転送完了を通知して終了です。 ** 実行結果 *** テキストドロップ &ref(swingドロップのテスト1.png) &ref(swingドロップのテスト2.png) *** ファイルドロップ &ref(swingドロップのテスト3.png) &ref(swingドロップのテスト4.png) *** ソース &ref(DropTest.java) #highlight(java){{ import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.io.File; import java.io.IOException; import java.util.List; import javax.swing.JFrame; import javax.swing.JLabel; /* * ドラッグアンドドロップのサンプル 1.ドロップを受け取るだけのサンプル(文字列、ファイル) * ポイント1.ドロップイベントを受け取るには「DropTargetListener.drop」を実装します。 * ポイント2.「DropTargetListener」は「DropTarget」に設定します。 * new DropTarget(コンポーネント, リスナー);を実行すると、DropTargetの内部でaddDropTargetListenerされます。 * ポイント3.ドロップすると1.で実装した「drop」が実行されます。 * 「DropTargetDropEvent.acceptDrop」でドロップを受け取る準備をします。 * 「DropTargetDropEvent.isDataFlavorSupported」で、受け取り可能なフレーバーを調べます。 * 標準では文字列用の「stringFlavor」、ファイル用の「javaFileListFlavor」、画像イメージ用の「imageFlavor」があります。 * 「DropTargetDropEvent.getTransferable」で転送クラスを取得します。 * 「Transferable.getTransferData」でドロップされたオブジェクトを受け取ります。 * ファイルは「List<File>」にキャストして操作するとよいです。 * 「DropTargetDropEvent.dropComplete」で転送完了を通知して終了です。 */ public class DropTest extends JFrame implements DropTargetListener { public static void main(String[] args) { new DropTest(); } JLabel label; public DropTest() { // ポイント2.「DropTargetListener」は「DropTarget」に設定します。 // new DropTarget(コンポーネント, // リスナー);を実行すると、DropTargetの内部でaddDropTargetListenerされます。 new DropTarget(this, this); setTitle("ドロップを受け取るだけのサンプル"); setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(100, 100, 300, 200); label = new JLabel("ドロップ待ちです。"); add(label); setVisible(true); } // ポイント1.ドロップイベントを受け取るには「DropTargetListener.drop」を実装します。 @Override public void drop(DropTargetDropEvent dtde) { // ポイント3.ドロップすると1.で実装した「drop」が実行されます。 // 「DropTargetDropEvent.acceptDrop」でドロップを受け取る準備をします。 dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); boolean flg = false; String str = "<html><pre>"; try { // 「DropTargetDropEvent.getTransferable」で転送クラスを取得します。 Transferable tr = dtde.getTransferable(); // 「DropTargetDropEvent.isDataFlavorSupported」で、受け取り可能なフレーバーを調べます。 // 標準では文字列用の「stringFlavor」、ファイル用の「javaFileListFlavor」、画像イメージ用の「imageFlavor」があります。 if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)) { // 文字列をドロップされた場合 // ドロップされた文字列をラベルに表示します。 str += "文字列をドロップされました。\n"; // 「Transferable.getTransferData」でドロップされたオブジェクトを受け取ります。 str += tr.getTransferData(DataFlavor.stringFlavor).toString(); flg = true; } else if (dtde .isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { // ファイルをドロップされた場合 // ドロップされたファイルを文字列に入れてラベルに表示します。 str += "ファイルをドロップされました。\n"; // 「Transferable.getTransferData」でドロップされたオブジェクトを受け取ります。 // ファイルは「List<File>」にキャストして操作するとよいです。 List<File> list = (List<File>) tr .getTransferData(DataFlavor.javaFileListFlavor); for (File file : list) { str += file.getPath() + "\n"; } flg = true; } str += "</pre></html>"; } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 「DropTargetDropEvent.dropComplete」で転送完了を通知して終了です。 dtde.dropComplete(flg); if (flg) { // ドロップされたオブジェクトをJLabelに設定します。 label.setText(str); } else { // ドロップを受け取れなかった場合はこちらで。 label.setText("ドロップを受け取りできませんでした。"); } } } // drop以外のメソッドは今回使わないので実装しません。 @Override public void dragEnter(DropTargetDragEvent dtde) { } @Override public void dragOver(DropTargetDragEvent dtde) { } @Override public void dropActionChanged(DropTargetDragEvent dtde) { } @Override public void dragExit(DropTargetEvent dte) { } } }}
*ドラッグアンドドロップのサンプル 1.ドロップを受け取るだけのサンプル(文字列、ファイル) ドラッグアンドドロップの入り口として、ドロップを受け取るだけのサンプルを書いてみました。 エクスプローラからファイルをドロップしたい!なんて場合も、この簡単なサンプルだけで十分です。 *** ポイント + ドロップイベントを受け取るには「DropTargetListener.drop」を実装します。 + 「DropTargetListener」は「DropTarget」に設定します。 ++ new DropTarget(コンポーネント, リスナー);を実行すると、DropTargetの内部でaddDropTargetListenerされます。 + ドロップすると1.で実装した「drop」が実行されます。 ++ 「DropTargetDropEvent.acceptDrop」でドロップを受け取る準備をします。 ++ 「DropTargetDropEvent.isDataFlavorSupported」で、受け取り可能なフレーバーを調べます。 +++ 標準では文字列用の「stringFlavor」、ファイル用の「javaFileListFlavor」、画像イメージ用の「imageFlavor」があります。 ++ 「DropTargetDropEvent.getTransferable」で転送クラスを取得します。 ++ 「Transferable.getTransferData」でドロップされたオブジェクトを受け取ります。 +++ ファイルは「List<File>」にキャストして操作するとよいです。 ++ 「DropTargetDropEvent.dropComplete」で転送完了を通知して終了です。 ** 実行結果 *** テキストドロップ &ref(swingドロップのテスト1.png) &ref(swingドロップのテスト2.png) *** エクスプローラからファイルドロップ &ref(swingドロップのテスト3.png) &ref(swingドロップのテスト4.png) *** ソース &ref(DropTest.java) #highlight(java){{ import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.io.File; import java.io.IOException; import java.util.List; import javax.swing.JFrame; import javax.swing.JLabel; /* * ドラッグアンドドロップのサンプル 1.ドロップを受け取るだけのサンプル(文字列、ファイル) * ポイント1.ドロップイベントを受け取るには「DropTargetListener.drop」を実装します。 * ポイント2.「DropTargetListener」は「DropTarget」に設定します。 * new DropTarget(コンポーネント, リスナー);を実行すると、DropTargetの内部でaddDropTargetListenerされます。 * ポイント3.ドロップすると1.で実装した「drop」が実行されます。 * 「DropTargetDropEvent.acceptDrop」でドロップを受け取る準備をします。 * 「DropTargetDropEvent.isDataFlavorSupported」で、受け取り可能なフレーバーを調べます。 * 標準では文字列用の「stringFlavor」、ファイル用の「javaFileListFlavor」、画像イメージ用の「imageFlavor」があります。 * 「DropTargetDropEvent.getTransferable」で転送クラスを取得します。 * 「Transferable.getTransferData」でドロップされたオブジェクトを受け取ります。 * ファイルは「List<File>」にキャストして操作するとよいです。 * 「DropTargetDropEvent.dropComplete」で転送完了を通知して終了です。 */ public class DropTest extends JFrame implements DropTargetListener { public static void main(String[] args) { new DropTest(); } JLabel label; public DropTest() { // ポイント2.「DropTargetListener」は「DropTarget」に設定します。 // new DropTarget(コンポーネント, // リスナー);を実行すると、DropTargetの内部でaddDropTargetListenerされます。 new DropTarget(this, this); setTitle("ドロップを受け取るだけのサンプル"); setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(100, 100, 300, 200); label = new JLabel("ドロップ待ちです。"); add(label); setVisible(true); } // ポイント1.ドロップイベントを受け取るには「DropTargetListener.drop」を実装します。 @Override public void drop(DropTargetDropEvent dtde) { // ポイント3.ドロップすると1.で実装した「drop」が実行されます。 // 「DropTargetDropEvent.acceptDrop」でドロップを受け取る準備をします。 dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); boolean flg = false; String str = "<html><pre>"; try { // 「DropTargetDropEvent.getTransferable」で転送クラスを取得します。 Transferable tr = dtde.getTransferable(); // 「DropTargetDropEvent.isDataFlavorSupported」で、受け取り可能なフレーバーを調べます。 // 標準では文字列用の「stringFlavor」、ファイル用の「javaFileListFlavor」、画像イメージ用の「imageFlavor」があります。 if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)) { // 文字列をドロップされた場合 // ドロップされた文字列をラベルに表示します。 str += "文字列をドロップされました。\n"; // 「Transferable.getTransferData」でドロップされたオブジェクトを受け取ります。 str += tr.getTransferData(DataFlavor.stringFlavor).toString(); flg = true; } else if (dtde .isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { // ファイルをドロップされた場合 // ドロップされたファイルを文字列に入れてラベルに表示します。 str += "ファイルをドロップされました。\n"; // 「Transferable.getTransferData」でドロップされたオブジェクトを受け取ります。 // ファイルは「List<File>」にキャストして操作するとよいです。 List<File> list = (List<File>) tr .getTransferData(DataFlavor.javaFileListFlavor); for (File file : list) { str += file.getPath() + "\n"; } flg = true; } str += "</pre></html>"; } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 「DropTargetDropEvent.dropComplete」で転送完了を通知して終了です。 dtde.dropComplete(flg); if (flg) { // ドロップされたオブジェクトをJLabelに設定します。 label.setText(str); } else { // ドロップを受け取れなかった場合はこちらで。 label.setText("ドロップを受け取りできませんでした。"); } } } // drop以外のメソッドは今回使わないので実装しません。 @Override public void dragEnter(DropTargetDragEvent dtde) { } @Override public void dragOver(DropTargetDragEvent dtde) { } @Override public void dropActionChanged(DropTargetDragEvent dtde) { } @Override public void dragExit(DropTargetEvent dte) { } } }}

表示オプション

横に並べて表示:
変化行の前後のみ表示: