2013-05-04 93 views
5

目前我有一個TextField,它是我的地址欄和一個WebView,它是我的頁面。當我點擊時,TextField似乎沒有做任何事情。它意味着運行loadPage方法並設置爲頁面來加載用戶輸入到地址欄中的任何內容。任何幫助,將不勝感激。
JavaFX TextField EventHandler

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."); 
     } 
    } 
} 

回答

6

獲取URL,從地址欄,沒有地址欄上的動作事件的toStringtext加載。

final TextField addressBar = new TextField(); 
addressBar.setOnAction(new EventHandler<ActionEvent>() { 
    public void handle(ActionEvent event) { 
    myWebEngine.load(addressBar.getText()); 
    } 
}); 

此外,加載是異步的,所以你的異常處理程序將無法工作。您需要監視webengine loadworker的異常屬性以從引擎中獲取異常。另外請注意,未找到的網址不一定是會被報告的異常,而是一個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); } 
} 
+0

你是對的,除了沒有設置,那麼你將如何檢測404迴應? – 2013-06-03 10:50:26

+0

請提出一個新的問題,關於從WebView中檢測404個Web服務器響應 – jewelsea 2013-06-03 16:39:35