美文网首页程序员公众号【麦小丁】征集优质文章
swing和java里嵌入浏览器使用JavaFX的方式

swing和java里嵌入浏览器使用JavaFX的方式

作者: Hank_谢旱 | 来源:发表于2018-12-11 16:22 被阅读3次

    一 背景

    swing可以编写一个桌面程序,只要机器上装有jre即可打开。那么swing中是否可以嵌入web页面呢?

    二 JavaFX方式实例

    在Swing中嵌入一个JavaFX的网页浏览器

    import java.awt.BorderLayout;
    import java.awt.Toolkit;
    import java.io.File;
    import javafx.application.Platform;
    import javafx.embed.swing.JFXPanel;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TextField;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.VBox;
    import javafx.scene.web.WebEngine;
    import javafx.scene.web.WebView;
    import javax.swing.JFrame;
    
    public class Main {
        private static final int WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
        private static final int HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
        private static final String url = "http://www.baidu.com";
        private static final String urlStart = "http://";
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            JFrame frame = new JFrame("嵌入浏览器");
            final JFXPanel webBrowser = new JFXPanel();
            frame.setLayout(new BorderLayout());
            frame.add(webBrowser, BorderLayout.CENTER);
            Platform.runLater(new Runnable() {
    
                @Override
                public void run() {
                    Group root = new Group();
                    Scene scene = new Scene(root, WIDTH, HEIGHT);
                    webBrowser.setScene(scene);
                    Double widthDouble = new Integer(WIDTH).doubleValue();
                    Double heightDouble = new Integer(HEIGHT).doubleValue();
    
                    VBox box = new VBox(10);
                    HBox urlBox = new HBox(10);
                    final TextField urlTextField = new TextField();
                    urlTextField.setText(url);
                    Button go = new Button("go");
                    urlTextField.setPrefWidth(WIDTH - 80);
                    urlBox.getChildren().addAll(urlTextField, go);
    
                    WebView view = new WebView();
                    view.setMinSize(widthDouble, heightDouble);
                    view.setPrefSize(widthDouble, heightDouble);
                    final WebEngine eng = view.getEngine();
                    eng.load(url);
                    root.getChildren().add(view);
    
                    box.getChildren().add(urlBox);
                    box.getChildren().add(view);
                    root.getChildren().add(box);
    
                    go.setOnAction(new EventHandler<ActionEvent>() {
                        @Override
                        public void handle(ActionEvent event) {
                            if (!urlTextField.getText().startsWith(urlStart)) {
                                eng.load(urlStart + urlTextField.getText());
                            } else {
                                eng.load(urlTextField.getText());
                            }
                        }
                    });
                }
            });
    
            int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
            int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
    
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(WIDTH, HEIGHT);
            frame.setLocation((screenWidth - WIDTH) / 2, (screenHeight - HEIGHT) / 2);
            frame.setVisible(true);
        }
    
    }
    

    三 效果

    这是一个很简单的例子。

    我们创建了JFrame和JFXPanel,然后在Platform.runLater中进行Scene的创建,并设置到JFXPanel中。

    我们创建了一个Textfield用来输入网址,创建了一个JavaFX Button来跳转到网址。判断网址是不是http://开头并做简单的处理。

    下面看看运行效果:


    效果图.png

    相关文章

      网友评论

        本文标题:swing和java里嵌入浏览器使用JavaFX的方式

        本文链接:https://www.haomeiwen.com/subject/bcrehqtx.html