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

  1. JavaFXJREを含んだ新規プロジェクトを作成する
    Create new project which contains JavaFX JRE.
  2. WebBrowserクラスを作成し以下のソースコードを記述する
    Create WebBrowser class and write source code as follows.
  3. 実行すると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つメソッドがあります.

  1. launch アプリケーションの起動
  2. init 初期化処理
  3. start エントリポイント
  4. 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.

  1. launch - Run application
  2. init - Initialize application
  3. start - Entry point
  4. 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.

jumpaku.hatenablog.com