のんびりプログラマの備忘録

のんびりやっていくのん

JavaFXについてのまとめ③

JavaFXをメインクラスとFXMLとコントロールクラスに分ける

まずFXMLとコントローラークラスとCSSを作ります

JavaFXapp.javaが置かれているjavafxappフォルダ[選択]
f:id:jocoroo:20141208005248j:plain

  1. メニューのファイル > 新規ファイル をクリック
  2. JavaFX > 空のFXML を[選択] 次へ
  3. FXML名を View と書きます。(適当)
  4. パッケージがjavafxappとなっています。未記入なら選択して 次へ
  5. Javaコントローラーの使用にチェックを入れます。 次へ
  6. Cascading Style Sheetsの使用にチェックを入れて 終了 を押します。


このようにjavafxappプロジェクト下に出来ました。
f:id:jocoroo:20141208010505j:plain

メインクラスとFXMLを関連付けます

JavaFXApp.javaを下記のコードに書き換えます
package javafxapp;

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class JavaFXApp extends Application {
    
    @Override
    public void start(Stage primaryStage) throws IOException {
        primaryStage.setTitle("ウィンドウのタイトル");
        Parent view = FXMLLoader.load(getClass().getResource("View.fxml"));
        primaryStage.setScene(new Scene(view, 800, 600));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

   Parent view = FXMLLoader.load(getClass().getResource("View.fxml"));
   primaryStage.setScene(new Scene(view, 800, 600));

この2行でView.fxmlと関連付けています。

コントロールクラスを設定します

ViewControllerの説明

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;

public class ViewController implements Initializable {

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        
    }        
}

コントローラークラスは色んな書き方があるようですが、自己流で書いていきます。
Initializableインタフェースクラスを実装しています。
Initializableは初期化クラス。このインタフェースを実装する事により
ウィンドウが生成された時に、一番最初に実行されるメソッドがinitializeメソッドとなります。

ViewControllerに処理を書きます。

package javafxapp;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

public class ViewController implements Initializable {

    
    @FXML private WebView WebViewArea = new WebView();
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        WebEngine engine = WebViewArea.getEngine();
        engine.load("https://www.google.co.jp/");    
    }    
    
    @FXML protected void onGoogle(ActionEvent event) {
        WebEngine engine = WebViewArea.getEngine();
        engine.load("https://www.google.co.jp/");
    }

    @FXML protected void onYahoo(ActionEvent event) {
        WebEngine engine = WebViewArea.getEngine();
        engine.load("http://www.yahoo.co.jp/");
    }

}

ViewController書き換え後の説明
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;


FXMLをインポートする事により@FXMLでメソッド名がFXMLに記述した処理名と関連付けされます。
WebEngineとWebViewはウェブを表示させるものです。

    @FXML private WebView WebViewArea = new WebView();


WebViewAreaオブジェクトというコントロール要素をnewしています。

    public void initialize(URL url, ResourceBundle rb) {
        WebEngine engine = WebViewArea.getEngine();
        engine.load("https://www.google.co.jp/");    
    } 


initializeは最初に実行されるメソッドです。
WebViewAreaというウェブを表示させる要素にgoogleを表示させています。

    @FXML protected void onGoogle(ActionEvent event) {
        WebEngine engine = WebViewArea.getEngine();
        engine.load("https://www.google.co.jp/");
    }


onGoogleの処理が実行されるとGoogleがロードされます。
onYahooも同じようにYahooがロードされます。

JavaFXについてのまとめ①

http://jocoroo.hatenablog.com/entry/2014/11/20/204906

JavaFXについてのまとめ②

http://jocoroo.hatenablog.com/entry/2014/12/07/183013

JavaFXについてのまとめ③[ココ]

http://jocoroo.hatenablog.com/entry/2014/12/08/020258

JavaFXについてのまとめ④
http://jocoroo.hatenablog.com/entry/2014/12/08/032056