「コントローラを初期化するには」の版間の差分

提供: tknotebook
移動: 案内検索
 
(1人の利用者による、間の5版が非表示)
1行: 1行:
[[Category:コンピュータ]][[Category:JavaFX]]
+
[[Category:コンピュータ]][[Category:Java]][[Category:JavaFX]]
 
[[メインページ]]>[[コンピュータの部屋#JavaFX]]>[[JavaFX Tips]]
 
[[メインページ]]>[[コンピュータの部屋#JavaFX]]>[[JavaFX Tips]]
  
  
FXMLファイルをロードが完了した時、そのタイミングで対応するコントローラのメソッドを起動できると何かと便利です。
+
FXMLファイルのロードが完了した時、そのタイミングで対応するコントローラのメソッドが起動できると何かと便利です。必須と言っていいと思います。
  
以下のソースのように、コントローラクラスで Initializable インターフェースを実装すると、
+
JavaFX 2.2 より前では、コントローラが initializable インターフェースを実装する必要がありましたが、
 +
JavaFX 2.2 以降では、以下のソースのように、public で 無引数の initializeメソッドを実装すると、
 
FXMLのロードが完了し、fx:id が指定されたノードで id と同名のフィールドが初期化された後、
 
FXMLのロードが完了し、fx:id が指定されたノードで id と同名のフィールドが初期化された後、
initializeメソッドが呼ばれるようになります。
+
initializeメソッドが呼ばれるようになりました。とても簡単です。
  
 +
initailizeメソッド を public にしたくない場合は `アノテーション @FML を付けてください。
  
  public class Controller implements Initializable {
+
 
 +
  public class Controller {
 
     // ノードを格納するフィールド
 
     // ノードを格納するフィールド
 
     public WebView webview;
 
     public WebView webview;
21行: 24行:
 
         engine.load("http://www.asahi.com");
 
         engine.load("http://www.asahi.com");
 
     }
 
     }
 
+
 
     // 初期化メソッド
 
     // 初期化メソッド
    @Override
+
     public void initialize() {
     public void initialize(URL location, ResourceBundle resources) {
+
 
         this.engine = webview.getEngine();
 
         this.engine = webview.getEngine();
 
         stateLabel.setText(engine.getLoadWorker().stateProperty().get().toString());
 
         stateLabel.setText(engine.getLoadWorker().stateProperty().get().toString());

2016年11月9日 (水) 12:57時点における最新版

メインページ>コンピュータの部屋#JavaFX>JavaFX Tips


FXMLファイルのロードが完了した時、そのタイミングで対応するコントローラのメソッドが起動できると何かと便利です。必須と言っていいと思います。

JavaFX 2.2 より前では、コントローラが initializable インターフェースを実装する必要がありましたが、 JavaFX 2.2 以降では、以下のソースのように、public で 無引数の initializeメソッドを実装すると、 FXMLのロードが完了し、fx:id が指定されたノードで id と同名のフィールドが初期化された後、 initializeメソッドが呼ばれるようになりました。とても簡単です。

initailizeメソッド を public にしたくない場合は `アノテーション @FML を付けてください。


public class Controller {
    // ノードを格納するフィールド
    public WebView webview;
    public Label stateLabel;

    private WebEngine engine;

    // イベントハンドラ
    public void load(ActionEvent actionEvent) {
        engine.load("http://www.asahi.com");
    }

    // 初期化メソッド
    public void initialize() {
        this.engine = webview.getEngine();
        stateLabel.setText(engine.getLoadWorker().stateProperty().get().toString());
        engine.getLoadWorker().stateProperty().addListener(
                (ObservableValue<?extends Worker.State>p, Worker.State oldState, Worker.State newState) -> {
                    stateLabel.setText(newState.toString());
                    if (newState == Worker.State.SUCCEEDED) {
                        ((Stage) webview.getScene().getWindow()).setTitle(engine.getTitle());
                    }
                }
        );
    }
}