「コントローラを初期化するには」の版間の差分
提供: tknotebook
(ページの作成:「Category:コンピュータCategory:JavaFX メインページ>コンピュータの部屋#JavaFX>JavaFX Tips FXMLファイルをロードが完...」) |
|||
(1人の利用者による、間の6版が非表示) | |||
1行: | 1行: | ||
− | [[Category:コンピュータ]][[Category:JavaFX]] | + | [[Category:コンピュータ]][[Category:Java]][[Category:JavaFX]] |
[[メインページ]]>[[コンピュータの部屋#JavaFX]]>[[JavaFX Tips]] | [[メインページ]]>[[コンピュータの部屋#JavaFX]]>[[JavaFX Tips]] | ||
− | |||
− | + | FXMLファイルのロードが完了した時、そのタイミングで対応するコントローラのメソッドが起動できると何かと便利です。必須と言っていいと思います。 | |
+ | |||
+ | JavaFX 2.2 より前では、コントローラが initializable インターフェースを実装する必要がありましたが、 | ||
+ | JavaFX 2.2 以降では、以下のソースのように、public で 無引数の initializeメソッドを実装すると、 | ||
FXMLのロードが完了し、fx:id が指定されたノードで id と同名のフィールドが初期化された後、 | FXMLのロードが完了し、fx:id が指定されたノードで id と同名のフィールドが初期化された後、 | ||
− | + | initializeメソッドが呼ばれるようになりました。とても簡単です。 | |
+ | initailizeメソッド を public にしたくない場合は `アノテーション @FML を付けてください。 | ||
− | public class Controller | + | |
+ | public class Controller { | ||
// ノードを格納するフィールド | // ノードを格納するフィールド | ||
public WebView webview; | public WebView webview; | ||
20行: | 24行: | ||
engine.load("http://www.asahi.com"); | engine.load("http://www.asahi.com"); | ||
} | } | ||
− | + | ||
// 初期化メソッド | // 初期化メソッド | ||
− | + | public void initialize() { | |
− | public void initialize( | + | |
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()); } } ); } }