Created
April 11, 2016 16:58
-
-
Save nil2013/662fbcc01f8dd3fddd7ac00481733d9d to your computer and use it in GitHub Desktop.
How to use Clipboard in Scala
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.datatransfer.FlavorListener | |
import java.awt.datatransfer.FlavorEvent | |
import java.awt.Toolkit | |
import java.awt.datatransfer.DataFlavor | |
import scala.annotation.tailrec | |
object ClipboardTest { | |
private var listener: Option[StrFlavorListener] = None | |
def clipboard = Toolkit.getDefaultToolkit.getSystemClipboard | |
def startTest { | |
listener match { | |
case Some(_) => | |
case None => | |
val l = new StrFlavorListener | |
listener = Option(l) | |
clipboard.addFlavorListener(l) | |
println(DataFlavor.imageFlavor.getRepresentationClass) | |
} | |
} | |
def showListenerList { | |
clipboard.getFlavorListeners foreach println | |
} | |
def stopTest { | |
listener match { | |
case Some(l) => clipboard.removeFlavorListener(l) | |
case None => | |
} | |
} | |
class StrFlavorListener extends FlavorListener { | |
override def flavorsChanged(e: FlavorEvent) { | |
println(e.toString) | |
println(e.getSource) | |
} | |
} | |
class ClipboardWatcher(flavor: DataFlavor) { | |
private var watching = false | |
def getData = flavor.getRepresentationClass.cast(clipboard.getData(flavor)) | |
def start(whenChanged: Any => Unit) { | |
var data = Option(getData) | |
@tailrec def loop { | |
(data, Option(getData)) match { | |
case (Some(d1), d @ Some(d2)) if d1 != d2 => | |
whenChanged(d2) | |
data = d | |
case (None, d @ Some(d1)) => | |
whenChanged(d1) | |
data = d | |
case _ => | |
} | |
Thread.sleep(100) | |
if (watching) { loop } | |
} | |
watching = true | |
loop | |
watching = false | |
} | |
def stop { watching = false } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment