-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathWebViewDemo.java
executable file
·107 lines (93 loc) · 3.36 KB
/
WebViewDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
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;
/**
* ブラウザのデモ
*
* カスタムWebブラウザを実現する
*/
public class WebViewDemo extends Application {
private WebEngine engine;
private TextField urlField;
@Override
public void start(Stage stage) {
stage.setTitle("WebView Demo");
BorderPane borderPane = new BorderPane();
borderPane.setLayoutY(10);
borderPane.setLayoutX(10);
Scene scene = new Scene(borderPane);
stage.setScene(scene);
// ブラウザ
WebView view = new WebView();
engine = view.getEngine();
view.setPrefSize(600,500);
borderPane.setCenter(view);
// 反射効果を加える
Reflection reflection = new Reflection();
reflection.setFraction(0.5);
view.setEffect(reflection);
// Webページのロードのタスク
Worker worker = engine.getLoadWorker();
// ページのロードが終了した時の処理
worker.stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue<? extends Worker.State> state,
Worker.State oldValue, Worker.State newValue) {
if (newValue == Worker.State.SUCCEEDED) {
String url = engine.getLocation();
if (url != null && !url.isEmpty()) {
urlField.setText(url);
}
}
}
});
// 水平ボックス
HBox hbox = new HBox(10);
hbox.setPrefHeight(40);
hbox.setAlignment(Pos.BASELINE_CENTER);
borderPane.setTop(hbox);
// イベントハンドラー
EventHandler<ActionEvent> handler = new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent t) {
loadUrl();
}
};
// テキスト入力
urlField = new TextField();
urlField.setPrefColumnCount(40);
urlField.setStyle("-fx-font-family: 'sans-serif'; -fx-font-size: 16;");
hbox.getChildren().add(urlField);
urlField.setOnAction(handler);
// ボタン
Button button = new Button("Open");
button.setStyle("-fx-font-family: 'sans-serif'; -fx-font-size: 16;");
hbox.getChildren().add(button);
button.setOnAction(handler);
stage.show();
}
// ページのロード
private void loadUrl() {
String url = urlField.getText();
if (url != null && !url.trim().isEmpty()) {
engine.load(url);
}
}
public static void main(String[] args) {
Application.launch(null);
}
}