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

一 背景

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文地址:https://www.tutorialspoint.com/javafx/javafx_applica...
    Eirture阅读 12,259评论 0 16
  • 晚点的火车刚刚驶出宝鸡站,就传来了列车播音员焦急的声音:“各位旅客大家好,3号车厢有位小朋友感冒发烧,由于列车上没...
    行者超阅读 6,813评论 31 28
  • 今天周五,明天终于不用早起啦!真开心!孩子盼着过周末!其实,我也盼着!我也想偷个懒! 我看嘉怡对阅读兴趣不大,我一...
    静雅_15de阅读 3,280评论 0 1
  • Hadoop集群环境搭建 Hadoop集群环境搭建 HDFS 图说HDFS基本原理hadoop的shell命令操作...
    piziyang12138阅读 3,443评论 0 0
  • 庄子说:天地有大美而不言。当我们放慢脚步,留心身边美好的事物,植物中大概竹子的剪影是最有韵味的,古雅的庭院在素壁前...
    青心_4f70阅读 3,660评论 1 3

友情链接更多精彩内容