Nashorn + JavaFXでQRコードを表示する
Java 8から新しいJavaScriptエンジンであるNashornが同梱されています。
実行シェルであるjjsでは、-fxオプションを使うと簡単にJavaFXアプリケーションが作成できます。
これを使って、コマンドライン引数の値でQRコードを生成して表示するスクリプトを書きました。
実行方法
ZXingライブラリを使用しています。Mavenリポジトリから各jarをダウンロードしてください。
- core-3.2.0.jar
- javase-3.2.0.jar
それぞれスクリプトと同じディレクトリに配置し、以下のコマンドで実行します。
jjs -cp core-3.2.0.jar;javase-3.2.0.jar -fx qr.js -- (QRコードの内容)
ソース (qr.js)
var Hashtable = java.util.Hashtable; var ImageView = javafx.scene.image.ImageView; var StackPane = javafx.scene.layout.StackPane; var Scene = javafx.scene.Scene; var SwingFXUtils = javafx.embed.swing.SwingFXUtils; var EncodeHintType = com.google.zxing.EncodeHintType; var ErrorCorrectionLevel = com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; var QRCodeWriter = com.google.zxing.qrcode.QRCodeWriter; var BarcodeFormat = com.google.zxing.BarcodeFormat; var MatrixToImageWriter = com.google.zxing.client.j2se.MatrixToImageWriter; var content = arguments[0]; // コマンドライン引数 var width = 230; var height = 230; function start(stage) { if (content) { // エンコード設定 var encodeHint = new Hashtable(); encodeHint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // QRコード生成 var writer = new QRCodeWriter(); var bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, encodeHint); var img = SwingFXUtils.toFXImage(MatrixToImageWriter.toBufferedImage(bitMatrix), null); // ウインドウに表示 stage.title = content; var root = new StackPane(); var imageView = new ImageView(img); root.children.add(imageView); stage.scene = new Scene(root, width, height); stage.show(); } else { exit(); // 引数が無ければ終了 } }
javafx.application.Applicationを継承せずにサクッと作れます。
あらかじめ用意されているユーティリティを使えば、昔ながらのBufferedImageも表示できます。