Successfully reported this slideshow.
JavaFX Update
JavaOne2013

⻘青江  崇(@aoetk)
⾃自⼰己紹介
• 
• 
• 
• 

⻘青江  崇
Twitter ID: aoetk / Hatena ID: aoe-tk
(株)ノーチラス・テクノロジーズ所属
本家JavaOneは今回が初参加!
JavaFXとは?
•  Javaに新たに加わったモダンなGUIツール
キット
–  FXMLの導⼊入によるプレゼンテーションとロ
ジックの分離離
–  アニメーション、エフェクト
–  CSSによるスタイリング
–  WebKitベースのブラ...
こんな感じで実装
public class BrowserViewController {
@FXML
private TextField textFieldUrl;
@FXML
private WebView webViewBrowser;
...
こうなります
以上、前座でした
本⽇日のトピック
•  JavaFX 8の新機能⼀一巡り
•  ⾯面⽩白かったセッションの紹介

–  A Tour of the New JavaFX Printing APIs
–  Ten Man-Years of JavaFX

•  ...
JavaFX 8の新機能⼀一巡り
新しいテーマ
Lambda!
これが…
final ToggleGroup themeGroup = new ToggleGroup();
...
themeGroup.selectedToggleProperty()
.addListener(new Ch...
Lambda!
こうなる!
final ToggleGroup themeGroup = new ToggleGroup();
...
themeGroup.selectedToggleProperty()
.addListener((ov, ...
Lambda!
このようにも書ける!
final ToggleGroup themeGroup = new ToggleGroup();
...
themeGroup.selectedToggleProperty()
.addListener(...
3Dグラフィック
•  JavaFX 2までは限定的にサポート

–  2Dのグラフィックを変形して3Dにする

•  JavaFX 8では3Dのシェイプが作れるように
–  CameraもNodeになり、シーングラフ上を動か
せるように
Op...
DatePickerの追加
•  やっとですか…
•  JSR-310 Date and Time APIに対応
SwingNode
•  「JavaFXの上にSwing」がOKに
•  SwingコンポーネントをSwingNodeでく
るんでシーングラフに追加
Label label = new Label("This is an FX Label");...
その他
•  基本APIの強化

–  Collection、Task、Bindingに機能追加

•  カスタムコントロールを実装するための
APIを公開
•  フルスクリーン機能の強化
•  印刷API
–  この後説明します
⾯面⽩白かったセッションの
紹介
セッション紹介その1
All the Nodes That Are Fit to Print: A Tour
of the New JavaFX Printing APIs
[CON2662]
(JavaFX 印刷APIのツアー)

Jenif...
セッション概要
•  JavaFX 8の新機能のうち、これまで余り
詳細な説明がなかった印刷APIについて解
説するセッション
•  重要なクラスについて解説
JavaFXにおける印刷の流流れ
•  印刷ジョブを管理理する
javafx.print.PrinterJobクラスを使うのが
基本
boolean doPrint(Node n) {
PrinterJob job = PrinterJob.c...
その他重要なクラス(その1)
•  Printer
–  プリンターデバイスを表す
–  サポート属性をPrinterAttributes経由で取得
その他重要なクラス(その2)
•  JobSettings
–  印刷ジョブの設定

•  PageLayout
–  印刷対象のページ設定
デモ
•  Scene Builderを使ってデザインした帳票
を印刷してみます
現在Macでは動作しないので、Windowsで
動かした様⼦子を動画でお⾒見見せします
まとめ
•  やっと加わった印刷API、なかなか使い易易
いAPIです
•  プリンター設定、印刷ジョブ設定、ペー
ジ設定など細かい各種設定を⾏行行うことが
可能
•  Scene Builderを帳票デザインツールとし
て使うのもありかも
セッション紹介その2
Henrik Olsson

Ten Man-Years of JavaFX: Real-World
Project Experiences [CON2670]
(10⼈人年年のJavaFX開発プロジェクト)
セッション概要
•  SmartBear社の製品、LoadUIの開発プロ
ジェクトを通して学んだことについて紹
介するセッション
–  JavaFXの良良さ
–  開発上のTips、落落とし⽳穴
–  OSSとして開発した⽀支援ライブラリ

•...
LoadUIについて
•  http://www.loadui.org/
•  JavaFX製負荷テストツール
•  OSSとして開発
–  機能強化した有償版あり

•  SoapUIの姉妹ツールとして開発
–  SOAP/RESTful W...
何故負荷テストツールを新たに
作ったのか?
Load Runner

UIがごちゃっとしてる!

JMeter

テストのワークフロー
が分かりにくい!
何故JavaFXなのか?
•  Illustratorで作った理理想を忠実に再現でき
るのがJavaFXだった
Illustrator

JavaFX
JavaFX 1で開発、しかし…
•  JavaFX 1がEOLに!
•  SmartBear社のCTOがOracleにEOL延⻑⾧長
を直訴!→答えは「No.」
•  ランタイムの配布を2013/3まで延ばして
もらい…
2013/4にJav...
JavaFX1から2への移植
•  移植に9ヶ⽉月
•  ソースコード量量は41K⾏行行から32K⾏行行に減る
–  でもリライト多し

•  性能は⼤大幅に向上!
•  JavaFX 1の弱点が解消
–  IDEサポートがプア
–  コントロ...
JavaFX開発上のTips
•  全プラットフォームでテストしよう
–  プラットフォーム間で微妙に差異異有り

• 
• 
• 
• 

CSS、FXMLをよく学ぼう
IntelliJかNetBeansで開発しよう
ビットマップは極⼒力力使...
プロジェクトを通して
⽀支援ライブラリもOSSとして開発
•  GuavaFX
–  https://github.com/SmartBear/GuavaFX
–  Google Guavaにインスパイアされた
ObservableListの拡...
プロジェクトを通して
⽀支援ライブラリもOSSとして開発
•  TestFX
–  https://github.com/SmartBear/TestFX
–  GUIテストツール
–  流流れるようなAPIでテストを記述できる
rightCl...
まとめ
•  JavaFXは本格的なプロダクト開発に使わ
れるようになってきています
•  このLoadUIのように「やりたいことを実
現する⼿手段」としてJavaFXが選択されて
います
•  実プロジェクトで揉まれたライブラリが
登場するよ...
その他⾯面⽩白かったセッション
•  Architecting Enterprise JavaFX 8
Applications [CON2229]
–  Java EEで有名なAdam Bienさんのセッション
–  本格的なJavaFXアプ...
JavaOneを通して⾒見見えた
JavaFXの向かう先
Oracleは何をJavaFXのターゲット
としているのか?
•  エンタープライズ向けデスクトップGUIの
開発
•  組み込み機器向けGUIの開発
エンタープライズ向けGUI
•  従来からのターゲット
•  採⽤用事例例が増え、ライブラリ、フレーム
ワークも増えている
•  Windows、Mac、Linux全てで使えるGUI
ツールキットは減っている
–  Adobe AIRはLinu...
組み込み機器向けGUI
•  Java SE 8 EmbeddedのGUIスタックとし
て採⽤用
–  ユースケースとしてはキオスク端末、医療療機
器、多機能プリンタ、ホームゲートウェイ、
監視システムなどなど

•  Internet of ...
ではiOSやAndroidは?
•  iOS、Android関連のセッションは直前に
キャンセル
•  特に新情報なし

Oracleはここでの勝負を捨てた?
•  コミュニティベースで実装することは妨
げない姿勢なのであきらめないで

–  ...
DukePadがあるじゃないか!
•  ホントにこういう製品が出るわけではな
いので…

–  低スペックな組み込み機器でもこれだけの
GUIが実現できることのデモです
–  レシピが公開されているので腕に⾃自信がある
⽅方はチャレンジを!

...
総括
•  JavaFX 8で本格的な⽤用途に使える⼟土台が
できあがった
•  JavaFXが徐々に実開発で使われ始めてい
ることを実感
–  本格的な開発事例例のセッション多数
–  実開発で培われたライブラリが登場

•  IoT時代にお...
参考資料料
公式ドキュメント  http://docs.oracle.com/javafx/
FX Experience http://fxexperience.com/
JavaFX Community
https://www.java.ne...
JavaOne2013報告会 JavaFX Update
Upcoming SlideShare
Loading in …5
×

JavaOne2013報告会 JavaFX Update

4,218 views

Published on

JavaOne2013報告会 JavaFX Updateの発表資料です

Published in: Technology
  • Be the first to comment

JavaOne2013報告会 JavaFX Update

  1. 1. JavaFX Update JavaOne2013 ⻘青江  崇(@aoetk)
  2. 2. ⾃自⼰己紹介 •  •  •  •  ⻘青江  崇 Twitter ID: aoetk / Hatena ID: aoe-tk (株)ノーチラス・テクノロジーズ所属 本家JavaOneは今回が初参加!
  3. 3. JavaFXとは? •  Javaに新たに加わったモダンなGUIツール キット –  FXMLの導⼊入によるプレゼンテーションとロ ジックの分離離 –  アニメーション、エフェクト –  CSSによるスタイリング –  WebKitベースのブラウザコンポーネント •  OpenJFXプロジェクトでOSSとして開発 Java SE8からは標準GUIツールキットに!
  4. 4. こんな感じで実装 public class BrowserViewController { @FXML private TextField textFieldUrl; @FXML private WebView webViewBrowser; @FXML private void handleButtonAction(ActionEvent event) { String url = textFieldUrl.getText(); webEngine.load(url); } } Javaコード FXML <AnchorPane id="AnchorPane” xmlns:fx="http://javafx.com/fxml” fx:controller="BrowserViewController"> <children> <Button fx:id="button" onAction="#handleButtonAction" text="Go" /> <TextField fx:id="textFieldUrl" onAction="#handleButtonAction" /> <WebView fx:id="webViewBrowser" /> </children> Node </AnchorPane> シーン グラフ
  5. 5. こうなります
  6. 6. 以上、前座でした
  7. 7. 本⽇日のトピック •  JavaFX 8の新機能⼀一巡り •  ⾯面⽩白かったセッションの紹介 –  A Tour of the New JavaFX Printing APIs –  Ten Man-Years of JavaFX •  JavaOneを通して⾒見見えたJavaFXの向かう 先
  8. 8. JavaFX 8の新機能⼀一巡り
  9. 9. 新しいテーマ
  10. 10. Lambda! これが… final ToggleGroup themeGroup = new ToggleGroup(); ... themeGroup.selectedToggleProperty() .addListener(new ChangeListener<Toggle>() { @Override public void changed(ObservableValue<? extends Toggle> ov, Toggle old, Toggle next) { if (next == btnModena) { setUserAgentStylesheet(STYLESHEET_MODENA); } else { setUserAgentStylesheet(STYLESHEET_CASPIAN); } } });
  11. 11. Lambda! こうなる! final ToggleGroup themeGroup = new ToggleGroup(); ... themeGroup.selectedToggleProperty() .addListener((ov, old, next) -> { if (next == btnModena) { setUserAgentStylesheet(STYLESHEET_MODENA); } else { setUserAgentStylesheet(STYLESHEET_CASPIAN); } } });
  12. 12. Lambda! このようにも書ける! final ToggleGroup themeGroup = new ToggleGroup(); ... themeGroup.selectedToggleProperty() .addListener(this::changeTheme); void changeTheme(ObservableValue<? extends Toggle> ov, Toggle old, Toggle next) { if (next == btnModena) { setUserAgentStylesheet(STYLESHEET_MODENA); } else { setUserAgentStylesheet(STYLESHEET_CASPIAN); } }
  13. 13. 3Dグラフィック •  JavaFX 2までは限定的にサポート –  2Dのグラフィックを変形して3Dにする •  JavaFX 8では3Dのシェイプが作れるように –  CameraもNodeになり、シーングラフ上を動か せるように OpenJFXで開発し ている3DViewer* を使って、Mayaや 3D Studio Maxで 作成したモデルを 取り込み可能に (*) JDK8のサンプル に⼊入っています
  14. 14. DatePickerの追加 •  やっとですか… •  JSR-310 Date and Time APIに対応
  15. 15. SwingNode •  「JavaFXの上にSwing」がOKに •  SwingコンポーネントをSwingNodeでく るんでシーングラフに追加 Label label = new Label("This is an FX Label"); JButton button = new JButton("This is a JButton"); button.addActionListener(event -> { Platform.runLater(() -> label.setText("Hello from Swing!")); }); SwingNode swing = new SwingNode(); swing.setContent(button); VBox box = new VBox(15, label, swing);
  16. 16. その他 •  基本APIの強化 –  Collection、Task、Bindingに機能追加 •  カスタムコントロールを実装するための APIを公開 •  フルスクリーン機能の強化 •  印刷API –  この後説明します
  17. 17. ⾯面⽩白かったセッションの 紹介
  18. 18. セッション紹介その1 All the Nodes That Are Fit to Print: A Tour of the New JavaFX Printing APIs [CON2662] (JavaFX 印刷APIのツアー) Jenifer Godinez Phil Race
  19. 19. セッション概要 •  JavaFX 8の新機能のうち、これまで余り 詳細な説明がなかった印刷APIについて解 説するセッション •  重要なクラスについて解説
  20. 20. JavaFXにおける印刷の流流れ •  印刷ジョブを管理理する javafx.print.PrinterJobクラスを使うのが 基本 boolean doPrint(Node n) { PrinterJob job = PrinterJob.createPrinterJob(); // ジョブ作成 if (job == null) return false; // プリンタがない // 印刷ダイアログを見せる if (!job.showPrintDialog(null)) return false; if (!job.printPage(n)) return false; // ノードを渡して印刷 return job.endJob(); // ジョブの終了 }
  21. 21. その他重要なクラス(その1) •  Printer –  プリンターデバイスを表す –  サポート属性をPrinterAttributes経由で取得
  22. 22. その他重要なクラス(その2) •  JobSettings –  印刷ジョブの設定 •  PageLayout –  印刷対象のページ設定
  23. 23. デモ •  Scene Builderを使ってデザインした帳票 を印刷してみます 現在Macでは動作しないので、Windowsで 動かした様⼦子を動画でお⾒見見せします
  24. 24. まとめ •  やっと加わった印刷API、なかなか使い易易 いAPIです •  プリンター設定、印刷ジョブ設定、ペー ジ設定など細かい各種設定を⾏行行うことが 可能 •  Scene Builderを帳票デザインツールとし て使うのもありかも
  25. 25. セッション紹介その2 Henrik Olsson Ten Man-Years of JavaFX: Real-World Project Experiences [CON2670] (10⼈人年年のJavaFX開発プロジェクト)
  26. 26. セッション概要 •  SmartBear社の製品、LoadUIの開発プロ ジェクトを通して学んだことについて紹 介するセッション –  JavaFXの良良さ –  開発上のTips、落落とし⽳穴 –  OSSとして開発した⽀支援ライブラリ •  “Ten Man-Years” つまり10⼈人年年のプロ ジェクト
  27. 27. LoadUIについて •  http://www.loadui.org/ •  JavaFX製負荷テストツール •  OSSとして開発 –  機能強化した有償版あり •  SoapUIの姉妹ツールとして開発 –  SOAP/RESTful Webサービス⽤用テストツー ル •  リッチクライアントらしい美麗麗なUIが特 ⾊色
  28. 28. 何故負荷テストツールを新たに 作ったのか? Load Runner UIがごちゃっとしてる! JMeter テストのワークフロー が分かりにくい!
  29. 29. 何故JavaFXなのか? •  Illustratorで作った理理想を忠実に再現でき るのがJavaFXだった Illustrator JavaFX
  30. 30. JavaFX 1で開発、しかし… •  JavaFX 1がEOLに! •  SmartBear社のCTOがOracleにEOL延⻑⾧長 を直訴!→答えは「No.」 •  ランタイムの配布を2013/3まで延ばして もらい… 2013/4にJavaFX 2への移植完了了!
  31. 31. JavaFX1から2への移植 •  移植に9ヶ⽉月 •  ソースコード量量は41K⾏行行から32K⾏行行に減る –  でもリライト多し •  性能は⼤大幅に向上! •  JavaFX 1の弱点が解消 –  IDEサポートがプア –  コントロールが少ない –  FXMLによるMVC/MVPパターンの導⼊入
  32. 32. JavaFX開発上のTips •  全プラットフォームでテストしよう –  プラットフォーム間で微妙に差異異有り •  •  •  •  CSS、FXMLをよく学ぼう IntelliJかNetBeansで開発しよう ビットマップは極⼒力力使わずCSSを利利⽤用 Java SE / FX 8に備えよ! 何より開発を楽しもう!
  33. 33. プロジェクトを通して ⽀支援ライブラリもOSSとして開発 •  GuavaFX –  https://github.com/SmartBear/GuavaFX –  Google Guavaにインスパイアされた ObservableListの拡張 •  transfrom、filter、concatを追加 •  transform以外はJavaFX 8で追加されている
  34. 34. プロジェクトを通して ⽀支援ライブラリもOSSとして開発 •  TestFX –  https://github.com/SmartBear/TestFX –  GUIテストツール –  流流れるようなAPIでテストを記述できる rightClick("#desktop").moveMouseTo("New") .click("Text Document") .type("myTextfile.txt") .press(ENTER)
  35. 35. まとめ •  JavaFXは本格的なプロダクト開発に使わ れるようになってきています •  このLoadUIのように「やりたいことを実 現する⼿手段」としてJavaFXが選択されて います •  実プロジェクトで揉まれたライブラリが 登場するようになりました 「試す」時期から「本気で使う」時期に 移りつつある!
  36. 36. その他⾯面⽩白かったセッション •  Architecting Enterprise JavaFX 8 Applications [CON2229] –  Java EEで有名なAdam Bienさんのセッション –  本格的なJavaFXアプリケーションを開発する際の アーキテクチャについての考察 •  Optimizing JavaFX Applications [CON3141] –  レンダリング処理理の詳細について解説するセッショ ン かなりディープな内容なのでJavaFX勉強会 あたりででもお話しできたらと
  37. 37. JavaOneを通して⾒見見えた JavaFXの向かう先
  38. 38. Oracleは何をJavaFXのターゲット としているのか? •  エンタープライズ向けデスクトップGUIの 開発 •  組み込み機器向けGUIの開発
  39. 39. エンタープライズ向けGUI •  従来からのターゲット •  採⽤用事例例が増え、ライブラリ、フレーム ワークも増えている •  Windows、Mac、Linux全てで使えるGUI ツールキットは減っている –  Adobe AIRはLinuxをドロップ –  エンタープライズ向けGUI開発フレームワー クとして期待されていたFlexは将来性に疑問 符が
  40. 40. 組み込み機器向けGUI •  Java SE 8 EmbeddedのGUIスタックとし て採⽤用 –  ユースケースとしてはキオスク端末、医療療機 器、多機能プリンタ、ホームゲートウェイ、 監視システムなどなど •  Internet of Things(IoT)をメインター ゲットとするOracleの⽅方向性に合致
  41. 41. ではiOSやAndroidは? •  iOS、Android関連のセッションは直前に キャンセル •  特に新情報なし Oracleはここでの勝負を捨てた? •  コミュニティベースで実装することは妨 げない姿勢なのであきらめないで –  OpenJFXではiOS、Android向け実装を公開 –  RoboVMを使っての動作検証例例あり
  42. 42. DukePadがあるじゃないか! •  ホントにこういう製品が出るわけではな いので… –  低スペックな組み込み機器でもこれだけの GUIが実現できることのデモです –  レシピが公開されているので腕に⾃自信がある ⽅方はチャレンジを! https://wiki.openjdk.java.net/display/OpenJFX/DukePad
  43. 43. 総括 •  JavaFX 8で本格的な⽤用途に使える⼟土台が できあがった •  JavaFXが徐々に実開発で使われ始めてい ることを実感 –  本格的な開発事例例のセッション多数 –  実開発で培われたライブラリが登場 •  IoT時代におけるGUI開発の主役になる可 能性が 今度度こそ俺達の時代が来る?!
  44. 44. 参考資料料 公式ドキュメント  http://docs.oracle.com/javafx/ FX Experience http://fxexperience.com/ JavaFX Community https://www.java.net/community/javafx OpenJFX Wiki https://wiki.openjdk.java.net/display/OpenJFX/Main OTN JavaFX Forum https://forums.oracle.com/community/developer/english/java/ javafx/javafx_2.0_and_later ITPro JavaFX 2で始めるGUI開発 http://itpro.nikkeibp.co.jp/article/COLUMN/ 20120731/413043/

×