2013-05-04 8 views
5

Obecnie mam TextField, który jest moim paskiem adresu i WebView, który jest moją stroną. Kiedy klikam, że wejście do pola tekstowego nie wydaje się nic robić. Ma to na celu uruchomienie metody loadPage i ustawienie strony, aby załadować wszystko, co użytkownik wprowadził na pasku adresu. Każda pomoc będzie doceniona.
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."); 
     } 
    } 
} 

Odpowiedz

6

uzyskać adres URL do załadowania z text paska adresu, a nie toString imprezy działania na pasku adresu.

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

Również obciążenie jest asynchroniczne, więc program obsługi wyjątku nie będzie działał. Musisz monitorować właściwość wyjątku loadengera webengine, aby uzyskać wyjątki od silnika. Zauważ, że adres URL, który nie został znaleziony, niekoniecznie stanowi wyjątek, który zostanie zgłoszony, zamiast tego serwer WWW zwykle zwróci stronę z błędem http 404.

Oto próbka robocza:

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

masz rację, wyjątek nie jest ustawiony, tak jak byś wykryć odpowiedź 404? –

+0

Zadaj nowe pytanie dotyczące wykrywania 404 odpowiedzi serwera WebView z WebView – jewelsea