WebView表示
Web画面のテストをJavaFXでできるようなのでまず始めにid:skrbさんのJavaFX でブラウザ - JavaFX in the Boxを写経してみました。
環境は、Mac OS X 10.7.4、NetBeans7.2、JavaSE1.7.0_07です。
写経したコードですが、バージョンアップに変更があったので以下の3点を変えています。
1.TextBoxがUI Controlからなくなっていたので変わりにTextFieldを使用
2.WebEngineはWebViewからgetEngineメソッドで取得
3.ページのロード終了時のTaskがWorkerに変わって、イベントも変更
3番目の変更は、JavaFX 2.2を参考にしました。
import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker; import javafx.concurrent.Worker.State; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.effect.Reflection; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.text.Font; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; /** * JavaFX */ public class WebViewDemo extends Application { private WebEngine engine; private TextField urlField; // 1.TextBox @Override public void start(Stage stage) { stage.setTitle("WebView Demo"); BorderPane borderPane = new BorderPane(); borderPane.setLayoutX(10); borderPane.setLayoutY(10); Scene scene = new Scene(borderPane); stage.setScene(scene); // ブラウザ WebView view = new WebView(); engine = view.getEngine(); // 2.WebViewからWebEngineを取得 view.setPrefSize(600, 500); borderPane.setCenter(view); // 反射効果を加える Reflection reflection = new Reflection(); reflection.setFraction(0.5); view.setEffect(reflection); // ページのロードが終了した時の処理 Worker<Void> worker = engine.getLoadWorker(); //3.TaskからWorker worker.stateProperty().addListener(new ChangeListener<State>() { @Override public void changed(ObservableValue ov, State oldState, State newState) { if (newState == State.SUCCEEDED) { String url = engine.getLocation(); urlField.setText(url); } } }); // 水平ボックス HBox hbox = new HBox(10); hbox.setPrefHeight(40); hbox.setAlignment(Pos.BASELINE_CENTER); borderPane.setTop(hbox); // テキスト入力 urlField = new TextField(); hbox.getChildren().add(urlField); // ボタン Button button = new Button("Open"); button.setFont(new Font("sanserif", 16)); hbox.getChildren().add(button); button.setOnAction(new EventHandler<ActionEvent>(){ @Override public void handle(ActionEvent event) { loadUrl(); } } ); stage.show(); } // ページのロード private void loadUrl() { String url = urlField.getText(); if (url != null && !url.trim().isEmpty()) { engine.load(url); } } /** * The main() method is ignored in correctly deployed JavaFX application. * main() serves only as fallback in case the application can not be * launched through deployment artifacts, e.g., in IDEs with limited FX * support. NetBeans ignores main(). * * @param args the command line arguments */ public static void main(String[] args) { launch(args); } }
で実行した画面ですが、反射の効果が、、、なぜがうまくいかないです。
まだまだ超初心者ですが、少しずつ勉強していこうと思います。