2013-05-04 2 views
5

현재 내 주소 표시 줄과 내 웹 페이지 인 TextField가 있습니다. ented를 클릭하면 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의 예외 속성을 모니터링해야합니다. 또한 발견되지 않은 URL이 반드시보고되는 예외는 아니며 대신 웹 서버는 http 404 오류 페이지를 반환합니다. 당신이 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

: 여기

는 작업 예제입니다? –

+0

WebView에서 404 웹 서버 응답을 감지하는 것과 관련하여 새로운 질문을하십시오. – jewelsea