SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
From Swing
    To JavaFX
 SwingからJavaFXへの
 マイグレーションガイド

         Java in the Box
         櫻庭 祐一
JavaFX の基本
JavaFX
   次世代の Java の GUI Library

機能的には Swing+Java2D+α

 JavaSE8 から標準 (JavaFX3.0)
public class Hello extends Application {
    @Override
    public void start(Stage stage) {
        // コンテナ
        Group container = new Group();

        // Scene Graph のルートを生成し、コンテナを貼る
        Scene scene = new Scene(container, 100, 20);
        stage.setScene(scene);

        // ラベルを生成しコンテナに貼る
        Label label = new Label("Hello, World!");
        container.getChildren().add(label);


    }
        stage.show();   SceneGraph
    public static void main(String[] args) {
        Application.launch(args);
    }
}            アプリケーションスレッドの起動
はまりそうなところ
コンテナへの追加
 pane.add(comp);
 pane.getChildren().add(comp);

イベント リスナは1種類のみ
 button.setOnAction(
     new EventHandler<ActionEvent>() {
         public void handle(ActionEvent event) {
             // イベント処理
         }
 });
Observer Pattern
Bind   View

                          Model


                     Event
       Controller
Bind   View

                     Model
              Bind

       Controller
Bind   View

                                  Model
                  Bind

       Controller

       // モデル
       DoubleProperty xProperty = new DoubleProperty();

       Slider slider = new Slider(50, 300, 0);
       // モデルにスライダの値をバインドさせる
       xProperty.bind(slider.valueProperty());

       Rectangle rect = new Rectangle(50, 10, 50, 30);
       // 四角の x 座標にモデルをバインドさせる
       rect.xProperty().bind(xProperty);
シナリオで考える
マイグレーション
   シナリオ 1 JavaFX in Swing
  シナリオ 2 Swing to JavaFX
                 w/o FXML
   シナリオ 3 Swing to JavaFX
                   w/ FXML
JavaFX in Swing
  Swing アプリケーションに
          JavaFX を埋め込む
     逆はサポートしない

JavaFX でしかできないことを
              Swing へ
     Web   メディア
     グラフ   アニメーション
JavaFX in Swing
  Swing アプリケーションに
          JavaFX を埋め込む
     逆はサポートしない

JavaFX でしかできないことを
              Swing へ
    Web   メディア
    グラフ   アニメーション
JFXPanel
  Swing に貼れる JavaFX 部品
      JFXPanel にはシーングラフを記述
 final JFXPanel fxPanel = new JFXPanel();   Swing EDT
 jframe.add(fxPanel);

 Platform.runLater(new Runnable() {
     @Override
     public void run() {       JavaFX App Thread
         AnchorPane root = new AnchorPane();
         Scene scene = new Scene(root);
         root.getChildren().add(new Button("JavaFX Button"));
         fxPanel.setScene(scene);
     }
 });
Swing to JavaFX w/o FXML
 Swing を JavaFX に書き換える
   使い方がほとんど同じもの
      Label,Button,TextField, et al.
   やり方は違うが、概念は同じもの
     レイアウト
   使い方が違うもの
     TableView,TreeView,ListView
Button
   Swing
      JButton = new JButton(”Swing”);

      button.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(new ActionEvent event) {
              // イベント処理
          }
      });


 JavaFX
   Button = new Button(”JavaFX”);

   button.setOnAction(new EventHandler<ActionEvent>() {
       @Override
       public void handle(ActionEvent event) {
           // イベント処理
       }
   });
Layout
Swing: コンテナ + レイアウトマネージャ
  JPanel panel = new JPanel();
  panel.setLayout(new BorderLayout());

  panel.add(comp, BorderLayout.CENTER);


JavaFX: コンテナがレイアウトを含む
  BorderPane pane = new BorderPane();

  pane.setCenter(comp);
Table
Swing: TableModel
JavaFX: Bean を Column にバインド
 class Student { ...... }   // Java Bean

 TableView<Student> table = new TableView<>();

 TableColumn col1 = new TableColumn("Name");
 col1.setCellValueFactory(
     new PropertyValueFactory<Student, String>("name")
 );
 TableColumn col2 = new TableColumn("Grad Year");
 col2.setCellValueFactory(
     new PropertyValueFactory<Student, Integer>("gradYear")
 );

 table.setItems(students);
 table.getColumns().addAll(col1, col2);
Swing to JavaFX
           w/   FXML
FXML
  GUI の構造を XML で表す
       シーングラフを表現する
スキーマレス
 クラス : 要素
 プロパティ : 属性 or 要素

       Java との連携
<AnchorPane prefHeight="400.0" prefWidth="600.0">
  <children>
    <HBox alignment="CENTER"
          prefHeight="50.0" prefWidth="572.0" spacing="20.0">
      <children>
        <TextField prefWidth="200.0" style="-fx-font-size: 24;" />
        <Button style="-fx-font-size: 24;" text="Load" />
      </children>
    </HBox>
    <WebView prefHeight="302.0" prefWidth="572.0" />
  </children>
</AnchorPane>



AnchorPane pane = FXMLLoader.load(
                    this.getClass().getResource("browser.fxml"));
FXML と Java の連携

 View     Controller   Model
 FXML       Java       Java
fx:id     @FXML
#method
<AnchorPane xmlns:fx="http://javafx.com/fxml"
             fx:controller="contents.BrowserController">
  <children>
    <HBox>
      <children>
        <TextField fx:id="textfield" />
        <Button onAction="#handleAction" />
      </children>
    </HBox>
    <WebView fx:id="webview" />
  </children>
            public class BrowserController implements Initializable {
</AnchorPane> @FXML private TextField textfield;
               @FXML private WebView webview;
               private WebEngine engine;

               @FXML public void handleAction(ActionEvent event) {
                   engine.load(textfield.getText());
               }
               @Override
               public void initialize(URL url, ResourceBundle rb) {
                   engine = webview.getEngine();
               }
           }
Tool
 Java   NetBeans


 FXML   Scene Builder
Conclusion
 マイグレーション 3 つのシナリオ
 Component ベースなら
   それほど違いはない
 FXML

今日やらなかったこと
  CSS, Animaction, Effect
  Shape, 非同期処理
From Swing
    To JavaFX
 SwingからJavaFXへの
 マイグレーションガイド


       Java in the Box
       櫻庭 祐一

Contenu connexe

Tendances

Asp.net mvc filters
Asp.net mvc filtersAsp.net mvc filters
Asp.net mvc filters
Eyal Vardi
 

Tendances (20)

Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
 
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
Asp.net mvc filters
Asp.net mvc filtersAsp.net mvc filters
Asp.net mvc filters
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
 
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチアーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
 
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re GoingSpring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
 
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRあの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送
 

En vedette

Marco del buen desempeño docente
Marco del buen desempeño docenteMarco del buen desempeño docente
Marco del buen desempeño docente
0013
 
1ºBACH ECONOMÍA Repaso temas 5 6-7 (gh23)
1ºBACH ECONOMÍA Repaso temas 5 6-7 (gh23)1ºBACH ECONOMÍA Repaso temas 5 6-7 (gh23)
1ºBACH ECONOMÍA Repaso temas 5 6-7 (gh23)
Geohistoria23
 
Error messages
Error messagesError messages
Error messages
rtinkelman
 
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpiGfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
lisbet bravo
 
JULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de Negocios
Julio Pari
 

En vedette (20)

Schrijven voor het web
Schrijven voor het webSchrijven voor het web
Schrijven voor het web
 
01 marco conceptual y procesos
01 marco conceptual y procesos01 marco conceptual y procesos
01 marco conceptual y procesos
 
Alas en la oscuridad --caryangel y rous
Alas en la oscuridad --caryangel y rousAlas en la oscuridad --caryangel y rous
Alas en la oscuridad --caryangel y rous
 
Proyecto Formativo
Proyecto FormativoProyecto Formativo
Proyecto Formativo
 
Manual bpm para la elaboracion de embutidos
Manual bpm para la elaboracion de embutidosManual bpm para la elaboracion de embutidos
Manual bpm para la elaboracion de embutidos
 
Metodología de la investigacióm
Metodología de la investigaciómMetodología de la investigacióm
Metodología de la investigacióm
 
Proyectos_de_innovacion
Proyectos_de_innovacionProyectos_de_innovacion
Proyectos_de_innovacion
 
Marco del buen desempeño docente
Marco del buen desempeño docenteMarco del buen desempeño docente
Marco del buen desempeño docente
 
"Protección de la salud mental luego del terremoto y tsunami del 27 de febrer...
"Protección de la salud mental luego del terremoto y tsunami del 27 de febrer..."Protección de la salud mental luego del terremoto y tsunami del 27 de febrer...
"Protección de la salud mental luego del terremoto y tsunami del 27 de febrer...
 
Primer Paquete Económico 2017 Zacatecas (2/9)
Primer Paquete Económico 2017 Zacatecas (2/9)Primer Paquete Económico 2017 Zacatecas (2/9)
Primer Paquete Económico 2017 Zacatecas (2/9)
 
Relatietips
RelatietipsRelatietips
Relatietips
 
1ºBACH ECONOMÍA Repaso temas 5 6-7 (gh23)
1ºBACH ECONOMÍA Repaso temas 5 6-7 (gh23)1ºBACH ECONOMÍA Repaso temas 5 6-7 (gh23)
1ºBACH ECONOMÍA Repaso temas 5 6-7 (gh23)
 
Error messages
Error messagesError messages
Error messages
 
De Reis van de Heldin december 2015
De Reis van de Heldin december 2015De Reis van de Heldin december 2015
De Reis van de Heldin december 2015
 
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpiGfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
 
Análisis situacional integral de salud final
 Análisis situacional integral de salud final Análisis situacional integral de salud final
Análisis situacional integral de salud final
 
Portafolio de Evidencias de mi Práctica Docente
Portafolio de Evidencias de mi Práctica DocentePortafolio de Evidencias de mi Práctica Docente
Portafolio de Evidencias de mi Práctica Docente
 
Geheugen verbeteren
Geheugen verbeterenGeheugen verbeteren
Geheugen verbeteren
 
JULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de Negocios
 
De impact van adhd
De impact van adhdDe impact van adhd
De impact van adhd
 

Similaire à From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド

JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
Yuichi Sakuraba
 
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
Yuichi Sakuraba
 
I Log On Saa S
I Log On Saa SI Log On Saa S
I Log On Saa S
totty jp
 
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替えMedia Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替え
Atsushi Tadokoro
 

Similaire à From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド (20)

JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
 
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0何が変わった JavaFX 2.0
何が変わった JavaFX 2.0
 
Scene BuilderでFXML
Scene BuilderでFXMLScene BuilderでFXML
Scene BuilderでFXML
 
JavaFX 2.0 への誘い
JavaFX 2.0 への誘いJavaFX 2.0 への誘い
JavaFX 2.0 への誘い
 
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
 
Visualforce + jQuery
Visualforce + jQueryVisualforce + jQuery
Visualforce + jQuery
 
Starting java fx
Starting java fxStarting java fx
Starting java fx
 
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
 
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~
3D で遊ぼう ~C#er も TypeScript で楽々 WebGL~
 
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFXUnit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Study Intro Backbone
Study Intro BackboneStudy Intro Backbone
Study Intro Backbone
 
I Log On Saa S
I Log On Saa SI Log On Saa S
I Log On Saa S
 
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替えMedia Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替え
 
WordPress widget api
WordPress widget apiWordPress widget api
WordPress widget api
 
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたXamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみた
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
 

Plus de Yuichi Sakuraba

Plus de Yuichi Sakuraba (20)

Vector API - Javaによるベクターコンピューティング
Vector API - JavaによるベクターコンピューティングVector API - Javaによるベクターコンピューティング
Vector API - Javaによるベクターコンピューティング
 
Oracle Code One - Java KeynoteとJava SE
Oracle Code One - Java KeynoteとJava SEOracle Code One - Java KeynoteとJava SE
Oracle Code One - Java KeynoteとJava SE
 
Project Loom + Project Panama
Project Loom + Project PanamaProject Loom + Project Panama
Project Loom + Project Panama
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
 
Oracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE UpdateOracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE Update
 
今こそStream API入門
今こそStream API入門今こそStream API入門
今こそStream API入門
 
Oracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE UpdateOracle Code One 報告会 Java SE Update
Oracle Code One 報告会 Java SE Update
 
Learn Language 2018 Java Language Update
Learn Language 2018 Java Language Update Learn Language 2018 Java Language Update
Learn Language 2018 Java Language Update
 
Dockerに向けて、Javaもダイエット
Dockerに向けて、JavaもダイエットDockerに向けて、Javaもダイエット
Dockerに向けて、Javaもダイエット
 
What's New in Java
What's New in JavaWhat's New in Java
What's New in Java
 
Migration Guide to Java SE 10, and also Java SE 11
Migration Guide to Java SE 10, and also Java SE 11Migration Guide to Java SE 10, and also Java SE 11
Migration Guide to Java SE 10, and also Java SE 11
 
琥珀色のJava - Project Amber -
琥珀色のJava - Project Amber -琥珀色のJava - Project Amber -
琥珀色のJava - Project Amber -
 
Moving to Module: Issues & Solutions
Moving to Module: Issues & SolutionsMoving to Module: Issues & Solutions
Moving to Module: Issues & Solutions
 
モジュール移行の課題と対策
モジュール移行の課題と対策モジュール移行の課題と対策
モジュール移行の課題と対策
 
Project Jigsawと、ちょっとだけVector API
Project Jigsawと、ちょっとだけVector APIProject Jigsawと、ちょっとだけVector API
Project Jigsawと、ちょっとだけVector API
 
Java SE 9の全貌
Java SE 9の全貌Java SE 9の全貌
Java SE 9の全貌
 
Java SEの現在、過去 そして未来
Java SEの現在、過去 そして未来Java SEの現在、過去 そして未来
Java SEの現在、過去 そして未来
 
Java SE 9 のススメ
Java SE 9 のススメJava SE 9 のススメ
Java SE 9 のススメ
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
Encouragement of Java SE 9
Encouragement of Java SE 9Encouragement of Java SE 9
Encouragement of Java SE 9
 

Dernier

Dernier (12)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド

  • 1. From Swing To JavaFX SwingからJavaFXへの マイグレーションガイド Java in the Box 櫻庭 祐一
  • 2.
  • 4. JavaFX 次世代の Java の GUI Library 機能的には Swing+Java2D+α JavaSE8 から標準 (JavaFX3.0)
  • 5. public class Hello extends Application { @Override public void start(Stage stage) { // コンテナ Group container = new Group(); // Scene Graph のルートを生成し、コンテナを貼る Scene scene = new Scene(container, 100, 20); stage.setScene(scene); // ラベルを生成しコンテナに貼る Label label = new Label("Hello, World!"); container.getChildren().add(label); } stage.show(); SceneGraph public static void main(String[] args) { Application.launch(args); } } アプリケーションスレッドの起動
  • 6. はまりそうなところ コンテナへの追加 pane.add(comp); pane.getChildren().add(comp); イベント リスナは1種類のみ button.setOnAction( new EventHandler<ActionEvent>() { public void handle(ActionEvent event) { // イベント処理 } });
  • 7. Observer Pattern Bind View Model Event Controller
  • 8. Bind View Model Bind Controller
  • 9. Bind View Model Bind Controller // モデル DoubleProperty xProperty = new DoubleProperty(); Slider slider = new Slider(50, 300, 0); // モデルにスライダの値をバインドさせる xProperty.bind(slider.valueProperty()); Rectangle rect = new Rectangle(50, 10, 50, 30); // 四角の x 座標にモデルをバインドさせる rect.xProperty().bind(xProperty);
  • 10. シナリオで考える マイグレーション シナリオ 1 JavaFX in Swing シナリオ 2 Swing to JavaFX w/o FXML シナリオ 3 Swing to JavaFX w/ FXML
  • 11. JavaFX in Swing Swing アプリケーションに JavaFX を埋め込む 逆はサポートしない JavaFX でしかできないことを Swing へ Web メディア グラフ アニメーション
  • 12. JavaFX in Swing Swing アプリケーションに JavaFX を埋め込む 逆はサポートしない JavaFX でしかできないことを Swing へ Web メディア グラフ アニメーション
  • 13. JFXPanel Swing に貼れる JavaFX 部品 JFXPanel にはシーングラフを記述 final JFXPanel fxPanel = new JFXPanel(); Swing EDT jframe.add(fxPanel); Platform.runLater(new Runnable() { @Override public void run() { JavaFX App Thread AnchorPane root = new AnchorPane(); Scene scene = new Scene(root); root.getChildren().add(new Button("JavaFX Button")); fxPanel.setScene(scene); } });
  • 14. Swing to JavaFX w/o FXML Swing を JavaFX に書き換える 使い方がほとんど同じもの Label,Button,TextField, et al. やり方は違うが、概念は同じもの レイアウト 使い方が違うもの TableView,TreeView,ListView
  • 15. Button Swing JButton = new JButton(”Swing”); button.addActionListener(new ActionListener() { @Override public void actionPerformed(new ActionEvent event) { // イベント処理 } }); JavaFX Button = new Button(”JavaFX”); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { // イベント処理 } });
  • 16. Layout Swing: コンテナ + レイアウトマネージャ JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(comp, BorderLayout.CENTER); JavaFX: コンテナがレイアウトを含む BorderPane pane = new BorderPane(); pane.setCenter(comp);
  • 17. Table Swing: TableModel JavaFX: Bean を Column にバインド class Student { ...... } // Java Bean TableView<Student> table = new TableView<>(); TableColumn col1 = new TableColumn("Name"); col1.setCellValueFactory( new PropertyValueFactory<Student, String>("name") ); TableColumn col2 = new TableColumn("Grad Year"); col2.setCellValueFactory( new PropertyValueFactory<Student, Integer>("gradYear") ); table.setItems(students); table.getColumns().addAll(col1, col2);
  • 18. Swing to JavaFX w/ FXML
  • 19. FXML GUI の構造を XML で表す シーングラフを表現する スキーマレス クラス : 要素 プロパティ : 属性 or 要素 Java との連携
  • 20. <AnchorPane prefHeight="400.0" prefWidth="600.0"> <children> <HBox alignment="CENTER" prefHeight="50.0" prefWidth="572.0" spacing="20.0"> <children> <TextField prefWidth="200.0" style="-fx-font-size: 24;" /> <Button style="-fx-font-size: 24;" text="Load" /> </children> </HBox> <WebView prefHeight="302.0" prefWidth="572.0" /> </children> </AnchorPane> AnchorPane pane = FXMLLoader.load( this.getClass().getResource("browser.fxml"));
  • 21. FXML と Java の連携 View Controller Model FXML Java Java fx:id @FXML #method
  • 22. <AnchorPane xmlns:fx="http://javafx.com/fxml" fx:controller="contents.BrowserController"> <children> <HBox> <children> <TextField fx:id="textfield" /> <Button onAction="#handleAction" /> </children> </HBox> <WebView fx:id="webview" /> </children> public class BrowserController implements Initializable { </AnchorPane> @FXML private TextField textfield; @FXML private WebView webview; private WebEngine engine; @FXML public void handleAction(ActionEvent event) { engine.load(textfield.getText()); } @Override public void initialize(URL url, ResourceBundle rb) { engine = webview.getEngine(); } }
  • 23. Tool Java NetBeans FXML Scene Builder
  • 24. Conclusion マイグレーション 3 つのシナリオ Component ベースなら それほど違いはない FXML 今日やらなかったこと CSS, Animaction, Effect Shape, 非同期処理
  • 25. From Swing To JavaFX SwingからJavaFXへの マイグレーションガイド Java in the Box 櫻庭 祐一