JavaFX LineChart 〜グラフを描く、ワンポイントレッスン的な〜

JavaFX LineCharクラスを使う

LineChartクラスを使用して以下のようなグラフが描けます。

はっきり言ってコピペで作成しました。参照元はOracleのドキュメントです。

もともと作成していた部分に追加して作成しました。ちなみに散布図もありました。

ポイントは以下のように、縦軸と横軸の内容を定義(区別)しているところだと思います。CSVなどデータを読み込んでそれを表示するときに便利です。

final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();

あとは、値を代入して行く形で実装完了!Gitでソースをみれます

// 盾と横軸の設定
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Month");       
// チャート(グラフ)
final LineChart<String,Number> lineChart = 
        new LineChart<String,Number>(xAxis,yAxis);
// グラフのタイトル        
lineChart.setTitle("Stock Monitoring, 2010");
// グラフの値を設定する
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");

series.getData().add(new XYChart.Data("Jan", 23));
series.getData().add(new XYChart.Data("Feb", 14));
series.getData().add(new XYChart.Data("Mar", 15));
series.getData().add(new XYChart.Data("Apr", 24));
series.getData().add(new XYChart.Data("May", 34));
series.getData().add(new XYChart.Data("Jun", 36));
series.getData().add(new XYChart.Data("Jul", 22));
series.getData().add(new XYChart.Data("Aug", 45));
series.getData().add(new XYChart.Data("Sep", 43));
series.getData().add(new XYChart.Data("Oct", 17));
series.getData().add(new XYChart.Data("Nov", 29));
series.getData().add(new XYChart.Data("Dec", 25));

vBox.getChildren().add(lineChart);
// データのセット
lineChart.getData().add(series);

関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜

Java StepUpPrograming〜リファクタリング→クラスを使う〜

イントロダクション

前回、ようやく画面切り替えを実装できました。長かったような短かったような。。。しかし、これで終わりではなく、むしろ始まる感じです (笑)

とりあえず、今回は自分の作業時間の都合があり、リファクタリングのみで終わります。


リファクタリングの内容

今回は、Eclipseで比較します。。。

  1. <プロジェクト・エクスプローラーで右クリック→チーム→ヒストリー>でコミット履歴を表示する
  2. <現在のソースと比較したいリビジョン(コミットした時の番号)を選択して右クリック>
  3. 現在のソースと比較をクリックする

https://www.youtube.com/watch?v=_9syqIs6-5o&feature=youtu.be

Gitでのソース比較です。

修正後のソース

package jp.zenryoku.fx;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.concurrent.Worker.State;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import jp.zenryoku.fx.pane.JavaBasicPane;
import jp.zenryoku.fx.pane.WebLoaderPane;

/**
 * JavaFXでのハローワールド〜OpenCVなどの
 * 作成したアプリをテストするための、スタンドアロンアプリ。
 * 
 * @author takunoji
 * 2019/01/23
 */
public class RootFxMain2 extends Application {
    /** 画面の縦幅 */
    private static final double VIEW_HEIGHT = 500.0;
    /** 画面の横幅 */
    private static final double VIEW_WIDTH = 500.0;
    /** コントロールボタンのリスト */
    private ArrayList<Button> buttonList;
    /** startメソッドから引っ越ししてフィールド変数にします */
    private BorderPane baseLayout;

    /**
     * 親クラスのメソッドをオーバーライドする。
     * 画面を作成したり、ペインを作成したり、色々。。。
     * 
     * @see javafx.application.Application#start(javafx.stage.Stage)
     */
    @Override
    public void start(Stage primaryStage) throws Exception {
        // JavaBasic画面用のコントロールボタンを作成する
        this.cretateControllButtonList();

        // 画面部分とコントロールボタン部分にレイアウト(表示領域を分ける)
        baseLayout = new BorderPane();

        // Stageの設定
        primaryStage.setHeight(VIEW_HEIGHT);
        primaryStage.setWidth(VIEW_WIDTH);

        // このクラスにあるメソッドなので名前だけで呼び出せる
        baseLayout.setCenter(JavaBasicPane.getInstance());
        // このクラスのメソッドであることを明示的に示すのに「this」を使用する
        baseLayout.setBottom(this.createFooterPanel());
        // 土台になるレイアウト(ペイン)をステージに追加する
        primaryStage.setScene(new Scene(baseLayout, VIEW_WIDTH, VIEW_HEIGHT));
        primaryStage.show();
    }

    /**
     * 画面のフッター部分にコントロール用のボタンを配置する。
     * 
     * @return Pane レイアウトコンテナ
     */
    private Pane createFooterPanel() {
        HBox hBox = new HBox(buttonList.size());
        for(Button ctlBtn : buttonList) {
            hBox.getChildren().add(ctlBtn);
        }
        return hBox;
    }

    /**
     * コントロールボタンを作成する。
     * 
     */
    private void cretateControllButtonList() {
        // デザインパターン:シングルトンの実装
        if (buttonList == null) {
            buttonList = new ArrayList<Button>();
        }
        Button viewChangeBtn = new Button("画面切り替え");
        viewChangeBtn.setOnAction(event -> {
            baseLayout.getChildren().remove(0);
            baseLayout.setCenter(WebLoaderPane.getInstance());
        });
        buttonList.add(viewChangeBtn);
        Button closeBtn = new Button("閉じる");
        buttonList.add(closeBtn);
    }
    /**
     * メインメソッド
     * @param args プログラム引数
     */
    public static void main(String[] args) {
        // 親クラスのメソッドを呼び出す、これは上のstart()を呼び出す。
        launch();
    }

    /**
     * JavaFX版のハローワールド実装用のメソッドになります。
     * @return 画面に出力する文字列
     */
    public String myFirstProgram() {
        // この「hyoji = ""」を「"hyoji = "Hello World"」と修正してください。
        String hyoji = "Hello World";
        long num = 12345678901L;
        float shosu = 123.09876543f;
        return hyoji;
    }
}

前バージョンのソースに比べて、画面ペインの作成メソッドが全て無くなっています。実質2つのメソッドですが。。。

どこに引っ越したかというと、「JavaBasicPain」「WebLoaderPane」クラスに引越ししました。

各クラスはシンプルにコンストラクタ(private)とインスタンス(getInstance)を取得するメソッドが実装してあります。

JavaBasicPane

/**
 * Copyright (c) 2012-present Lightweight Java Game Library All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 * Neither the name Lightweight Java Game Library nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
 */
package jp.zenryoku.fx.pane;

import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;

/**
 * JavaBasic用の画面クラス。
 * Paneクラスを継承して、画面の表示部分を作成します。
 * 
 * @author takunoji
 * 2019/01/28
 */
public class JavaBasicPane extends Pane {
    /** このクラスのインスタンス */
    private static JavaBasicPane instance;

    /**
     * コンストラクタ。
     * デフォルト設定でのJavaBasic画面を作成します。
     */
    private JavaBasicPane() {
        // 暗黙的に起動される親クラスのコンストラクタ
        super();
        // レイアウトたて
        VBox vBox = new VBox(5);
        // レイアウト横
        HBox hBox = new HBox(8);
        // ラベルの設定
        Label label = new Label();
        // ハローワールドを出力する
        label.setText("Hello World");
        label.setFont(new Font("RobotRegular", 24));
        vBox.getChildren().add(label);

        // 1個目の数値、テキストフィールド
        TextField text1 = new TextField();
        text1.setPrefColumnCount(3);
        text1.setAlignment(Pos.BASELINE_CENTER);
        hBox.getChildren().add(text1);
        // 計算式のラベル
        Label ope = new Label("+");
        hBox.getChildren().add(ope);

        // 2個目の数値、テキストフィールド
        TextField text2 = new TextField();
        text1.setPrefColumnCount(3);
        text1.setAlignment(Pos.BASELINE_CENTER);
        hBox.getChildren().add(text2);

        // 縦のレイアウトに追加する
        vBox.getChildren().add(hBox);

        // 子供(中身)のペインを追加
        this.getChildren().add(vBox);
    }

    /** 
     * インスタンを取得する。
     * このクラスのインスタンスは、必ず1つなので「static」をつけて良い。
     * @return JavaBasicPane
     */
    public static JavaBasicPane getInstance() {
        if (instance == null) {
            instance = new JavaBasicPane();
        }
        return instance;
    }
}

インスタンスを取得するメソッドは自分が気に入っている、実装方法です。

シングルトン・パターン

public static JavaBasicPane getInstance() {
    if (instance == null) {
      instance = new JavaBasicPane();
  }
return instance;
}

このクラスのインスタンスが既にあるのならば、フィールドにあるインスタンスを返すメソッドになっています。つまりコンストラクタは一回しか通らない。。。

そして、フィールド変数には自分自身(JavaBasicPane)のインスタンスが格納できるようになっています。

こうすると、インスタンスが沢山できて余計なメモリを食わないで済みます。

ちなみに、ウェブサーバーにログインするときはインスタンスが1つだと複数人でログインした時に、どのインスタンスがどのユーザーかわからないので、インスタンスが複数になるようにクラスを作ります。したのはサンプルです。

public class LoginClass {
   // ユーザー名
   private String userName;
   // 性別
   private int sex;
   /* ログイン処理メソッド */
   public login() {
     // ログイン用の処理
   }
}

<<< 前回 おまけ >>>

Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜

イントロダクション

前回は、Paneクラスを切り替えて画面の切り替え処理ができるようになりました。

これは、GUIツールで画面を作成したものです。全部プログラムで書かなくても画面作成ができることを紹介するものです。

今回は切り替えたあとに画面を表示する処理を実装します。

HTMLをロードする

単純に指定したURLのHTMLをダウンロードして表示するというものです。

HTMLのダウンロード〜表示までは「WebEngine」クラスがやってくれているので実装する側としては気にする必要がありません。

そして今まで作成していたソースに改変を大きめというほどではないですが、入れました。下のはGitでソースの差分を出したものです。

実際エラーが下の方に出ています。がそれは気にしなくても良いもののようです。→調べてみたらWebKit(ブラウザ)の履いているエラーらしい。。。

https://www.youtube.com/watch?v=YPuaUUvCdMg&feature=youtu.be

とりあえずはこんな感じでロードできました。

ソース

package jp.zenryoku.fx;

import java.util.ArrayList;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.concurrent.Worker.State;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

/**
 * JavaFXでのハローワールド〜OpenCVなどの
 * 作成したアプリをテストするための、スタンドアロンアプリ。
 * 
 * @author takunoji
 * 2019/01/23
 */
public class RootFxMain2 extends Application {
    /** 画面の縦幅 */
    private static final double VIEW_HEIGHT = 500.0;
    /** 画面の横幅 */
    private static final double VIEW_WIDTH = 500.0;
    /** コントロールボタンのリスト */
    private ArrayList\<Button\> buttonList; // ポイント1
    /** startメソッドから引っ越ししてフィールド変数にします */
    private BorderPane baseLayout; // ポイント2

    /**
     * 親クラスのメソッドをオーバーライドする。
     * 画面を作成したり、シーンを作成したり、色々。。。
     * 
     * @see javafx.application.Application#start(javafx.stage.Stage)
     */
    @Override
    public void start(Stage primaryStage) throws Exception {
        // JavaBasic画面用のコントロールボタンを作成する
        this.cretateControllButtonList();
        // 画面部分とコントロールボタン部分にレイアウト(表示領域を分ける)
        baseLayout = new BorderPane();

        // Stageの設定
        primaryStage.setHeight(VIEW_HEIGHT);
        primaryStage.setWidth(VIEW_WIDTH);

        // このクラスにあるメソッドなので名前だけで呼び出せる
        baseLayout.setCenter(createJavaBasicPane());
        // このクラスのメソッドであることを明示的に示すのに「this」を使用する
        baseLayout.setBottom(this.createFooterPanel());
        // 土台になるレイアウト(ペイン)をステージに追加する
        primaryStage.setScene(new Scene(baseLayout, VIEW_WIDTH, VIEW_HEIGHT));
        primaryStage.show();
    }

    /**
     * シーンの作成部分を切り出ししました。
     * このシーンはJavaの基本を実行する時用にします。
     * 
     * @see http://zenryokuservice.com/wp/2019/01/25/java-stepupprogr…avafxで画面切り替えを作る〜/
     * @return JavaBasic用のPane
     */
    private Pane createJavaBasicPane() {
        // レイアウトたて
        VBox vBox = new VBox(5);
        // レイアウト横
        HBox hBox = new HBox(8);
        // ラベルの設定
        Label label = new Label();
        // ハローワールドを出力する
        label.setText(myFirstProgram());
        label.setFont(new Font("RobotRegular", 24));
        vBox.getChildren().add(label);

        // 1個目の数値、テキストフィールド
        TextField text1 = new TextField();
        text1.setPrefColumnCount(3);
        text1.setAlignment(Pos.BASELINE_CENTER);
        hBox.getChildren().add(text1);
        // 計算式のラベル
        Label ope = new Label("+");
        hBox.getChildren().add(ope);

        // 2個目の数値、テキストフィールド
        TextField text2 = new TextField();
        text1.setPrefColumnCount(3);
        text1.setAlignment(Pos.BASELINE_CENTER);
        hBox.getChildren().add(text2);

        // 縦のレイアウトに追加する
        vBox.getChildren().add(hBox);

        // シーンの作成
        return vBox;
    }

    /**
     * HTMLローダーの画面(シーン)を作成します。
     * 
     * @return HTンLローダー画面
     */
    private Pane createHtmlLoaderPane() {
        StackPane pane = new StackPane();
        WebView web = new WebView();
        web.setPrefWidth(VIEW_WIDTH);
        web.setPrefHeight(VIEW_HEIGHT - 20);
        WebEngine engine = web.getEngine();
        engine.getLoadWorker().stateProperty()
            .addListener((observer, oldValue, newValue) -> {
                if (newValue == State.SUCCEEDED) {
                    System.out.println("*** Load is finished! ***");
                }
            });
        engine.load("http://zenryokuservice.com/wp/");
        pane.getChildren().add(web);
        System.out.println("非同期ロード処理開始");
        return pane;
    }

    /**
     * 画面のフッター部分にコントロール用のボタンを配置する。
     * 
     * @return Pane レイアウトコンテナ
     */
    private Pane createFooterPanel() {
        HBox hBox = new HBox(buttonList.size());
        for(Button ctlBtn : buttonList) {
            hBox.getChildren().add(ctlBtn);
        }
        return hBox;
    }

    /**
     * コントロールボタンを作成する。
     * 
     */
    private void cretateControllButtonList() {
        // デザインパターン:シングルトンの実装
        if (buttonList == null) {
            buttonList = new ArrayList\<Button\>();
        }
        Button viewChangeBtn = new Button("画面切り替え");
        viewChangeBtn.setOnAction(event -> {
            baseLayout.getChildren().remove(0);
            baseLayout.setCenter(createHtmlLoaderPane());
        });
        buttonList.add(viewChangeBtn);
        Button closeBtn = new Button("閉じる");
        buttonList.add(closeBtn);
    }
    /**
     * メインメソッド
     * @param args プログラム引数
     */
    public static void main(String[] args) {
        // 親クラスのメソッドを呼び出す、これは上のstart()を呼び出す。
        launch();
    }

    /**
     * JavaFX版のハローワールド実装用のメソッドになります。
     * @return 画面に出力する文字列
     */
    public String myFirstProgram() {
        // この「hyoji = ""」を「"hyoji = "Hello World"」と修正してください。
        String hyoji = "Hello World";
        long num = 12345678901L;
        float shosu = 123.09876543f;
        return hyoji;
    }
}

ソース中赤い字で記載している部分が、HTMLをロードする部分のコードになります。

ソースが長くなって来たので、まぁみづらい感じですが。。。以下の順番で処理は走っています。

  1.  mainメソッド
  2.  start()
  3.  cretateControllButtonList()
  4.  createJavaBasicPane()
  5.  createFooterPanel()
  6.    myFirstProgram()

赤い字の「ポイント1」

フィールド変数のボタンクラスのリスト(ArrayList)にボタンを作成して追加します。その後「createFooterPanel()」でリストからボタンを取得してPaneに登録しています。

赤い字の「ポイント2」

今回のJavaFX画面は「BorderLayout」の①「Center」と②「Bottom」を使用しています。

①は入力するとかWebの画面など「View」の部分です。

②は画面の下にあるボタンを配置する部分です。

おめでとうございます

なんやかんやと、JavaBasic画面とHTMLロード画面の(とりあえずの)作成が完了しました。

「初めてJavaをやった方」へ
よく頑張ったと思います。自分にご褒美をあげてください(笑)

「久しぶりやった方」へ
ネットワークのアクセス部分は新鮮だったのではないでしょうか?

「普段からコーディングしている方」へ
ネットワークのアクセス部分は新鮮だったのではないでしょうか?

「Java歴〜年の方」へ
まだまだ序の口なので、ご安心ください。そのうちにデザインパターンなども触れていきます。※まだ準備ができていません。。。

体制を整えようと思っています。

ちょっとソースが汚くなって来たのと、OpenCVでのチュートリアルを行うために、一度ソースを綺麗に(リファクタリング)しようと思います。

それは次回行いますが、目的としては以下の通り

  • FXMLをロードして画面コンポーネントとして画面に表示する
  • 今まで作成したものも使えるようにする
  • OpenCVを使うときの設定(プロジェクト)も改めてやる

というわけで、作成したものを移動してEclipseの1つのプロジェクトに整理しようと思います。※現状(2019/01/27)はPracticeJava1というプロジェクトに入っていますが、それを別プロジェクトを作成します。

でわでわ。。。

<<< 前回 次回 >>>

Java Network URL〜ワンポイントレッスン的な〜

java.net.URLの使い方

private static URL createURL() {
    // URLを指定する
    String targetUrl = "http://zenryokuservice.com/wp/";
    URL url = null;
    URLConnection connect = null;
    try {
        // 文字列のURLからクラスを生成
        url = new URL(targetUrl);
        // 接続する
        connect = url.openConnection();
        // ロードするときの設定を行う
        connect.setRequestProperty("User-Agent", "Mozilla/5.0");
        // 読み込みの設定
        connect.setDoInput(true);
        BufferedReader read = new BufferedReader(new InputStreamReader(connect.getInputStream()));
        sysoutReader(read);
    } catch(MalformedURLException e) {
        e.printStackTrace();
    } catch(IOException ie) {
        ie.printStackTrace();
    }
    return url;
}

これでHTMLファイルをダウンロードできました。


関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜

イントロダクション

前回は、イベント(アクション)の実装方法についてやりました。

画面的には「ボタンを作成して、押下した時に何かの処理を行う」というところまで来ました。※ボタンを押すとコンソールにACTIONと出力(イベントタイプ出力)する処理です。

 

画面切り替えの実装

そもそもの目的は「画面の切り替え」を目的にしています。なので画面を切り替えるのですが、現状のままだと切り替えた後の画面がありません。

なので切り替えた後の画面も作成します。HTMLをダウンロードして表示するというものです。

今まで、話題に出していませんでしたが、密かにHTMLロード画面を作成するためのメソッドを作っておきました。createHtmlLoaderPane()メソッドです。Gitにアップロード済みですので、必要に応じて使用してください。

現状(2019/01/27より前)のコード

/**
 * HTMLローダーの画面(シーン)を作成します。
 * 
 * @return HTンLローダー画面
 */
private Pane createHtmlLoaderPane() {
	
	return null;
}

初めは「シーン(Scene)クラス」が必要だと思っていたのですが、Paneクラスでやったほうが無難だと判断したのでPaneクラスを使用します。

参考にしたサイトはこちらです。

<実装してみたコード>

/**
 * HTMLローダーの画面(シーン)を作成します。
 * 
 * @return HTンLローダー画面
 */
private Pane createHtmlLoaderPane() {
	StackPane pane = new StackPane();
	WebView web = new WebView();
	web.getEngine().load("https://docs.oracle.com/javafx/2/get_started/jfxpub-get_started.htm");
	pane.getChildren().add(web);
	System.out.println("ロード完了");
	return pane;
}

<実行結果>

画面の切り替えはうまくいったけど、HTMLのロードがうまくいっていないようです。。。

これは、デバックするしかなさそうだ。。。この時点のソースはアップロードしておきます。Gitなのでダウンロードできます。

この問題をなんとかしてどうにかしなくては。。。今回はここまでにします。

でわでわ。。。

[rakuten ids="yukamimimi:10001634"]