2013-02-14 2 views
0

Я создал браузер javafx webview из примеров проектов, заданных в netbeans. 7.2 Я пытаюсь вызвать этот браузер при нажатии кнопки из другой формы Jframe. , но с указанием ошибки вызывающая jframe не является подклассом приложенияcall javafx webview browser from another swing jframe form

Ниже приведен код Java fx WebviewBrowser.

import java.util.List; 
import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.HPos; 
import javafx.geometry.Insets; 
import javafx.geometry.VPos; 
import javafx.scene.Node; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.VBox; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 

public class WebViewBrowser extends Application { 

@Override public void start(Stage primaryStage) throws Exception { 
    Pane root = new WebViewPane(); 
    primaryStage.setScene(new Scene(root, 1024, 768)); 
    primaryStage.show(); 
    } 


public static void main(String[] args) { 
    launch(args); 
} 


    public class WebViewPane extends Pane { 

    public WebViewPane() { 
     VBox.setVgrow(this, Priority.ALWAYS); 
     setMaxWidth(Double.MAX_VALUE); 
     setMaxHeight(Double.MAX_VALUE); 

     WebView view = new WebView(); 
     view.setMinSize(500, 400); 
     view.setPrefSize(500, 400); 
     final WebEngine eng = view.getEngine(); 
     eng.load("http://www.lawcrux.com/"); 
     // final TextField locationField = new TextField("http://www.oracle.com/us/index.html"); 
     // locationField.setMaxHeight(Double.MAX_VALUE); 
     Button goButton = new Button("Go"); 
     goButton.setDefaultButton(true); 
     EventHandler<ActionEvent> goAction = new EventHandler<ActionEvent>() { 
      @Override public void handle(ActionEvent event) { 
     //  eng.load(locationField.getText().startsWith("http://") ? locationField.getText() : 
      //    "http://" + locationField.getText()); 
      } 
     }; 
    // goButton.setOnAction(goAction); 
     // locationField.setOnAction(goAction); 
     eng.locationProperty().addListener(new ChangeListener<String>() { 
      @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
     //  locationField.setText(newValue); 
      } 
     }); 
     GridPane grid = new GridPane(); 
     grid.setVgap(5); 
     grid.setHgap(5); 
     // GridPane.setConstraints(locationField, 0, 0, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.SOMETIMES); 
     GridPane.setConstraints(goButton,1,0); 
     GridPane.setConstraints(view, 0, 1, 2, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS); 
     grid.getColumnConstraints().addAll(
       new ColumnConstraints(100, 100, Double.MAX_VALUE, Priority.ALWAYS, HPos.CENTER, true), 
       new ColumnConstraints(40, 40, 40, Priority.NEVER, HPos.CENTER, true) 
     ); 
    // grid.getChildren().addAll(locationField, goButton, view); 
     getChildren().add(grid); 
    } 

    @Override protected void layoutChildren() { 
     List<Node> managed = getManagedChildren(); 
     double width = getWidth(); 
     double height = getHeight(); 
     double top = getInsets().getTop(); 
     double right = getInsets().getRight(); 
     double left = getInsets().getLeft(); 
     double bottom = getInsets().getBottom(); 
     for (int i = 0; i < managed.size(); i++) { 
      Node child = managed.get(i); 
      layoutInArea(child, left, top, 
          width - left - right, height - top - bottom, 
          0, Insets.EMPTY, true, true, HPos.CENTER, VPos.CENTER); 
     } 
    } 
} 

}

На другой JFrame на кнопку мыши я зову эту webviewbrowser как следующий код.

WebViewBrowser frm= new WebViewBrowser(); 
    WebViewBrowser.launch(); 
    frm.launch(); 
+1

Не могли бы вы предоставить stacktrace исключения здесь? –

ответ

0

Если вы используете JFrame, то вы должны использовать Swing. Похоже, вы пытаетесь назвать это приложение JavaFX прямо из Swing. Это не сработает.

Посмотрите на демо-SimpleSwingBrowser отправил Oracle:

Код: http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm

Учебник: http://docs.oracle.com/javafx/2/swing/swing-fx-interoperability.htm

Основная идея заключается в том, что вы должны обернуть JFXPanel, WebEngine, Scene, и WebView в JFrame. Таким образом, вы можете использовать JavaFX в приложении Swing, но он должен оставаться в окнах Swing. Вы не можете отображать окно приложения JavaFX (т. Е. Без Swing JFrame или другого окна, инкапсулирующего его).