美文网首页程序员公众号【麦小丁】征集优质文章
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的方式

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

  • Swing使用JavaFXweb组件

    概述 swing中内嵌入web组件的 需要使用一些其他的jar包 ,但是如果使用javafx的组件,那么也比较的方...

  • JavaFX引入资源问题

    描述 使用javafx 引入资源的时候 抛出异常 在swing引入资源 采取相对路径即可,而javafx不是 im...

  • JavaFX-嵌入Swing页面中方法

    0.前言 最近刚入手java开发客户端程序,在选择Swing与JavaFX两个GUI框架时,发现Swing已经停止...

  • DJNativeSwing-SWT组件-Java GUI中内嵌浏

    Java项目中经常需要在GUI程序中嵌入浏览器,而Swing自带的组件对CSS、JS的支持不是很好,网上也有很多组...

  • java 桌面应用开发相关的类

    java开发主要有awt,swing,javafx,笔记记录如下主要几个跟桌面相关的 桌面Robot类,模拟事件 ...

  • JavaFX 简介

    JavaFX 介绍 一提到Java的图形界面库,我们通常听到的都是Swing,或者更老一点的AWT,包括很多书上面...

  • JavaFX-OKhttp简易封装

    0.前言 JavaFX作为JAVA客户端GUI框架,在使用JavaFX作为前端开发的时候,如果使用了前后端分离的方...

  • 03.第二章 - HTML中的JavaScript

    将 JavaScript插入HTML的主要方法是使用 元素。 使用方式 方式一 :页面中直接嵌入行内 Java...

  • JavaSE 学习路线图

    面向对象编程基础 JavaFX入门 JDK基础组件的使用 Java函数式编程基础 JavaFX进阶 单元测试与构建...

网友评论

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

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