2013-05-04 22 views
5

Derzeit habe ich ein TextField, das ist meine Adressleiste und ein WebView, das meine Seite ist. Wenn ich auf ented klicke, scheint das TextField nichts zu tun. Es ist vorgesehen, die loadPage-Methode auszuführen und auf Seite zu setzen, um den von der Benutzerin eingegebenen Wert in die Adressleiste zu laden. Jede Hilfe wäre willkommen.
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."); 
     } 
    } 
} 

Antwort

6

die URL Rau aus den text neben der Adressleiste zu laden, nicht die toString des Aktionsereignisses auf der Adressleiste.

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

Auch die Ladung ist asynchron, daher wird Ihr Ausnahmebehandler nicht funktionieren. Sie müssen die Exception-Eigenschaft des Web-Engine-Loadworker überwachen, um Ausnahmen von der Engine zu erhalten. Beachten Sie auch, dass eine URL, die nicht gefunden wird, nicht unbedingt eine Ausnahme darstellt, die gemeldet wird. Stattdessen gibt ein Webserver normalerweise eine Seite für einen HTTP 404-Fehler zurück.

ist hier ein funktionstüchtiges Beispiel:

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

Sie richtig sind, wird die Ausnahme nicht gesetzt ist, so, wie Sie die 404-Antwort erkennen würde? –

+0

Bitte stellen Sie eine neue Frage bezüglich der Erkennung von 404 Webserver Antworten von WebView – jewelsea

Verwandte Themen