読者です 読者をやめる 読者になる 読者になる

Scala Swing エクスプローラーからファイルをドラッグ&ドロップする

Scala Swingの機能使って実現したかったけど、やり方が見つからなかったので、
JFrameのインスタンスを持ってきて、JavaのSwingと同じ方法で実現してます。

peerでJFrameのインスタンスを取得できるらしいです。
これ他にも応用聞くと思うので覚えておいたほうがいいですね。

import scala.swing.{ SimpleSwingApplication, MainFrame, Dimension, Dialog}
import java.awt.dnd.DropTarget
import java.awt.dnd.DropTargetDropEvent
import java.awt.dnd.DnDConstants
import java.awt.datatransfer.DataFlavor
import scala.collection.JavaConversions._ 

object ScalaSwing extends SimpleSwingApplication {

	def top = new MainFrame {
		title = "Drag Drop"
		minimumSize = new Dimension(300, 200)
		
		peer.setDropTarget(new DropTarget(){
			override def drop(e : DropTargetDropEvent) : Unit = {
				e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE)
				val t = e.getTransferable()
				val fileList = (t.getTransferData(DataFlavor.javaFileListFlavor)).asInstanceOf[java.util.List[java.io.File]];
				
				var a = new StringBuilder()
				fileList.map(x => a.append(x.getPath() + "\n"))
				//ドラッグされたファイルのパスを表示
				Dialog.showMessage(message = a)
			}
		})
	}
}