JavaFX 1 Application class
はじめに Introduction
この記事ではブラウザの作成を通して, JavaFXの土台となるクラスについて解説します. javafx.WebViewというクラスを使うとWebページのロードや表示をとても簡単に行うことができます. 自分を含めたJavaFX入門者の理解に繋がれば幸いです.
Developing a simple web browser, I am going to explain JavaFX classes. It is easy to load and display a web page and make a simple web browser with JavaFX. I am glad if this article makes beginners includes me understand JavaFX.
準備と実行 Preparation and Run
準備 Preparation
JavaFXの環境構築は次の記事に書いてあります.
The following is how to prepare JavaFX.
https://jumpaku.hatenablog.com/entry/2015/09/21/170800jumpaku.hatenablog.com
作業 Works
- JavaFXのJREを含んだ新規プロジェクトを作成する
Create new project which contains JavaFX JRE. - WebBrowserクラスを作成し以下のソースコードを記述する
Create WebBrowser class and write source code as follows. - 実行するとgoogleのページが表示される
Run application and google page is displayed.
ソースコード Source code
package jumpaku.webbrowser; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.web.WebView; public class WebBrowser extends Application { @Override public void start(Stage primaryStage) { try { WebView webView = new WebView(); webView.getEngine().load("https://www.google.co.jp/"); Scene scene = new Scene(webView); primaryStage.setScene(scene); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String... args) { Application.launch(WebBrowser.class, args); } }
解説 Explanation
JavaFXのアプリケーションはApplicationクラスを継承して作成します. 今回はApplicationクラスを継承してWebBrowserクラスを作成しました.
Extending Application class, JavaFX application is written. I made WebBrowser class extending Application class.
Applicationクラスの継承
Applicationクラスには主に次の4つメソッドがあります.
- launch アプリケーションの起動
- init 初期化処理
- start エントリポイント
- stop 終了処理
launchメソッドを呼び出すとアプリケーションが起動します. launchメソッドは1度だけ呼び出す事ができ, 第一引数は次の様にApplicationクラスを継承したクラスでなければいけません.
Application.launch(Class<? extends Application> appClass, String... args);
また次の様に引数を1つだけにする事も出来ますがその場合Applicationのサブクラスのメソッド内でしか呼び出せません.
Application.launch(String... args);
アプリケーションが起動されるとまずinitメソッドが呼び出されます. initメソッドをオーバーライドする事で初期化処理を実装する事ができます.
次にstartメソッドが呼び出されます. startメソッドはエントリポイントであり, initメソッドの後に開始準備が整ったら呼び出さます.
Platform.exitメソッドを呼び出すかウィンドウが閉じられるとアプリケーションが終了します. この時にstopメソッドが呼び出されます. stopメソッドをオーバーライドする事で終了処理を実装する事ができます. System.exitメソッドでもアプリケーションを終了する事ができますがその場合stopメソッドは呼び出されません. initメソッドとstopメソッドはオーバーライドしない場合は何もしません.
WebBrowserクラスの解説
Applicationクラスを継承する時はstartメソッドをオーバーライドする必要があります. 今回のWebBrowserクラスではstartメソッドでGUI部品の組み立てを行っています. startメソッドに渡されたprimaryStageはプラットフォームによって生成されたものです. StageクラスはGUI部品の配置の土台となるクラスで, ウィンドウの管理をします.
まずWebViewというGUI部品を生成してgoogleのページをロードしました. WebViewクラスはウェブエンジンを管理しその内容を表示します. 次にこのWebViewオブジェクトをSceneオブジェクトに保持させます. Sceneクラスは全てのGUI部品を保持するクラスで, シーングラフというGUI部品同士の構造を管理します. そしてこのSceneオブジェクトをprimaryStageにセットします. Stageオブジェクトのshowメソッドを呼び出す事でウィンドウを表示します.
mainメソッド内ではlaunchメソッドを呼び出してアプリケーションを起動しています.
Extend Application class
Application class has important 4 methods.
- launch - Run application
- init - Initialize application
- start - Entry point
- stop - Finalize application
When launch method is called, the application runs. You can call launch method only once. First argument must be extending Application class as follows.
Application.launch(Class<? extends Application> appClass, String... args);
You can call this method with one argument as follows. Then, launch method must be called from method of a sub class extending Application class.
Application.launch(String... args);
When you run an application, first, init method is called. You can implement initialization overriding init method.
After init method, if application is ready, start method is called. It is the entry point.
When Platform.exit is called or the last window is closed, application is ended. At that time, stop method is called. You can implement finalization overriding stop method. You can end application using System.exit but stop is not called. Without overriding, init method and stop method do nothing.
Implement WebBrowser class
When you extend Application class, you must override start method. start method of WebBrowser class constructs GUI parts. Given primaryStage in start method is created by platform. Stage class is a foundation of arrangement of GUI parts and manages window.
First, I generated a WebView object which is a GUI parts and load google page. WebView class manages a web engine and displays contents of that. Next, creating Scene object, I set WebView object to that. Scene class contains GUI parts manages scene graph which is structure of GUI parts. Then, I set Scene object to primaryState. After that, I displayed a window calling primaryStage.show
In main method, calling launch, I run the application.
まとめ Summary
- startメソッドをオーバーライドしてApplicationクラスを継承
Override start method to extend Application class. - Aplication.launchで起動
Call Aplication.launch method to launch the application. - Stageクラスはウィンドウの土台
Stage class is foundation of window. - Sceneクラスはシーングラフの親玉
Scene class is boss of scene graph. - WebViewは便利
WebView class is convenient.
次回 Next
もう少し立派なWebブラウザを作ります. Develop more useful web browser.