5分で!
Starting JavaFX
                         @hakurai
自己紹介
• @hakurai


• 奈良生まれ奈良育ち


• Java + Swing


• 流れ的にJavaFX


• 模型とか→
Twitterクライアントを作る




        &
NetBeans IDE
JavaFX プロジェクトを作成する
FXML



コントローラクラス
FXML



コントローラクラス
AnchorPane

     TextArea

      Button

     ListView
ビューの構造を表すFXML




                AnchorPane

                     TextArea

                      Button

                     ListView
XML?めんどくさい!
JavaFX Scene Builder
コントローラクラス
FXML アノテーション
fx:id=”tweetButton”
fx:id=”inputTweetArea”




     fx:id=”statusList”
fx:id=”tweetButton”
fx:id=”inputTweetArea”




     fx:id=”statusList”
onAction=”#handleTweetAction”
ステータスをStreaming APIで取得
非同期処理
イベント処理            画面更新

    JavaFX Application
         Thread
イベント処理          画面更新

    JavaFX Application
         Thread 重い処理
イベント処理          画面更新

    JavaFX Application
         Thread 重い処理
フリーズ




イベント処理          画面更新

    JavaFX Application
         Thread 重い処理
JavaFX Application
                     別スレッド
     Thread
重い処理は別のスレッド



tweetExecutor.execute(new Runnable() {
        @Override
        public void run() {
          try {
               twitterServiceAgent.updateStatus(text);
          } catch (TwitterException ex) {
          }
        }
    });
JavaFX Application
                     別スレッド
     Thread
データ不整合




JavaFX Application
                     別スレッド
     Thread
JavaFX Application
                     別スレッド
     Thread
画面の更新はJavaFX Application Thread

 public void onStatus(final Status status) {
   Platform.runLater(new Runnable() {
      @Override
      public void run() {
         if (statusList.size() >= maxStatusNum) {
             statusList.remove(maxStatusNum - 1);
         }

             statusList.add(0, status);
         }
   });
早速動かしてみた
テキストしか出ない・・・




               status.toString()
ListCell と CellFactory
セルに表示するオブジェクトを返す



         ListCell<Status>


                       StatusCellFactory

     Callback<ListView<Status>, ListCell<Status>>
ListCell<Status>

Starting java fx