JavaFXTextFieldEventHandler
目前,我有一个TextField,它是我的地址栏,还有一个WebView,它是我的页面。当我单击文本字段时,它似乎什么都不做。这意味着运行loadPage方法并设置为page以加载用户在地址栏中输入的任何内容。任何帮助都将不胜感激。JavaFXTextFieldEventHandler,java,javafx,Java,Javafx,目前,我有一个TextField,它是我的地址栏,还有一个WebView,它是我的页面。当我单击文本字段时,它似乎什么都不做。这意味着运行loadPage方法并设置为page以加载用户在地址栏中输入的任何内容。任何帮助都将不胜感激。 package javafx_webview; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; im
package javafx_webview;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class Main extends Application {
WebEngine myWebEngine;
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
primaryStage.setTitle("Platinum v1");
TextField addressBar = new TextField();
addressBar.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
loadPage(event.toString());
}
});
WebView myBrowser = new WebView();
myWebEngine = myBrowser.getEngine();
StackPane root = new StackPane();
root.getChildren().add(myBrowser);
root.getChildren().add(addressBar);
primaryStage.setScene(new Scene(root, 640, 480));
primaryStage.show();
}
private void loadPage(String url) {
try {
myWebEngine.load(url);
} catch (Exception e) {
System.out.println("The URL you requested could not be found.");
}
}
}
package javafx_webview;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.StackPane;
导入javafx.scene.web.WebEngine;
导入javafx.scene.web.WebView;
导入javafx.stage.stage;
公共类主扩展应用程序{
网络引擎myWebEngine;
公共静态void main(字符串[]args){
发射(args);
}
公共无效开始(阶段primaryStage){
primaryStage.setTitle(“白金v1”);
TextField addressBar=新的TextField();
addressBar.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
loadPage(event.toString());
}
});
WebView myBrowser=新建WebView();
myWebEngine=myBrowser.getEngine();
StackPane root=新的StackPane();
root.getChildren().add(myBrowser);
root.getChildren().add(地址栏);
原始阶段。设置场景(新场景(根,640480));
primaryStage.show();
}
私有void加载页(字符串url){
试一试{
myWebEngine.load(url);
}捕获(例外e){
System.out.println(“找不到您请求的URL”);
}
}
}
从地址栏的文本中获取要加载的url,而不是从地址栏上操作事件的字符串中获取
final TextField addressBar = new TextField();
addressBar.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
myWebEngine.load(addressBar.getText());
}
});
final TextField addressBar=new TextField();
addressBar.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
加载(addressBar.getText());
}
});
此外,加载是异步的,因此异常处理程序无法工作。您需要监视webengine loadworker的exception属性以从引擎获取异常。还请注意,找不到的url不一定是会报告的异常,相反,web服务器通常会返回http 404错误页面
以下是一个工作示例:
import javafx.application.Application;
import javafx.beans.value.*;
import javafx.event.*;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.scene.web.*;
import javafx.stage.Stage;
public class Main extends Application {
private WebEngine myWebEngine;
public void start(Stage stage) {
stage.setTitle("Platinum v1");
final TextField addressBar = new TextField();
addressBar.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
myWebEngine.load(addressBar.getText());
}
});
WebView myBrowser = new WebView();
myWebEngine = myBrowser.getEngine();
myWebEngine.getLoadWorker().exceptionProperty().addListener(new ChangeListener<Throwable>() {
@Override public void changed(ObservableValue<? extends Throwable> observableValue, Throwable oldException, Throwable exception) {
System.out.println("WebView encountered an exception loading a page: " + exception);
}
});
VBox root = new VBox();
root.getChildren().setAll(
addressBar,
myBrowser
);
stage.setScene(new Scene(root));
stage.show();
}
public static void main(String[] args) { launch(args); }
}
导入javafx.application.application;
导入javafx.beans.value.*;
导入javafx.event.*;
导入javafx.scene.scene;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.VBox;
导入javafx.scene.web.*;
导入javafx.stage.stage;
公共类主扩展应用程序{
私有WebEngine-myWebEngine;
公众假期开始(阶段){
舞台剧集名称(“白金v1”);
最终文本字段地址栏=新文本字段();
addressBar.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
加载(addressBar.getText());
}
});
WebView myBrowser=新建WebView();
myWebEngine=myBrowser.getEngine();
myWebEngine.getLoadWorker().exceptionProperty().addListener(新的ChangeListener()){
@Override public void changed(observeValueYou's right,the exception not set,那么您将如何检测404响应?请询问有关从WebView检测404 Web服务器响应的新问题