0

我已经从 netbeans 7.2 中给出的示例项目创建了 javafx webview 浏览器,我试图在从另一个 Jframe 表单单击按钮时调用此浏览器。但是它给出的错误是调用jframe不是Application的子类

以下是 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 on Button 单击上,我将此 webviewbrowser 称为以下代码。

   WebViewBrowser frm= new WebViewBrowser();
   WebViewBrowser.launch();
   frm.launch();
4

1 回答 1

0

如果您使用的是 JFrame,那么您必须使用 Swing。所以听起来你正试图直接从 Swing 调用这个 JavaFX 应用程序。这行不通。

看看 Oracle 发布的 SimpleSwingBrowser 演示:

代码: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 中。因此,您可以在 Swing 应用程序中使用 JavaFX,但它必须保留在 Swing 窗口中。您不能显示 JavaFX 应用程序窗口(即没有 Swing JFrame 或其他封装它的窗口)。

于 2013-08-22T23:33:31.247 回答