需求要在swing加一个浏览器,在网上找了一个挺方便的方法,现在把代码贴上来

力求方便。

package com.vtradex.page.shipment;

import static javafx.concurrent.Worker.State.FAILED;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.net.MalformedURLException;

import java.net.URL;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JProgressBar;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

import javafx.application.Platform;

import javafx.beans.value.ChangeListener;

import javafx.beans.value.ObservableValue;

import javafx.embed.swing.JFXPanel;

import javafx.event.EventHandler;

import javafx.scene.Scene;

import javafx.scene.web.WebEngine;

import javafx.scene.web.WebEvent;

import javafx.scene.web.WebView;

@SuppressWarnings("restriction")

public class WebBowserTest extends JFrame {

private final JFXPanel jfxPanel = new JFXPanel();

private WebEngine engine;

private final JPanel panel = new JPanel(new BorderLayout());

private final JLabel lblStatus = new JLabel();

private final JButton btnGo = new JButton("Go");

private final JTextField txtURL = new JTextField();

private final JProgressBar progressBar = new JProgressBar();

public WebBowserTest() {

super();

initComponents();

}

private void initComponents() {

createScene();

ActionListener al = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

loadURL(txtURL.getText());

}

};

btnGo.addActionListener(al);

txtURL.addActionListener(al);

progressBar.setPreferredSize(new Dimension(150, 18));

progressBar.setStringPainted(true);

JPanel topBar = new JPanel(new BorderLayout(5, 0));

topBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));

topBar.add(txtURL, BorderLayout.CENTER);

topBar.add(btnGo, BorderLayout.EAST);

JPanel statusBar = new JPanel(new BorderLayout(5, 0));

statusBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));

statusBar.add(lblStatus, BorderLayout.CENTER);

statusBar.add(progressBar, BorderLayout.EAST);

panel.add(topBar, BorderLayout.NORTH);

panel.add(jfxPanel, BorderLayout.CENTER);

panel.add(statusBar, BorderLayout.SOUTH);

getContentPane().add(panel);

setPreferredSize(new Dimension(1024, 600));

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

pack();

}

private void createScene() {

Platform.runLater(new Runnable() {

@Override

public void run() {

WebView view = new WebView();

engine = view.getEngine();

engine.titleProperty().addListener(new ChangeListener<String>() {

@Override

public void changed(ObservableValue<? extends String> observable, String oldValue,

final String newValue) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

WebBowserTest.this.setTitle(newValue);

}

});

}

});

engine.setOnStatusChanged(new EventHandler<WebEvent<String>>() {

@Override

public void handle(final WebEvent<String> event) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

lblStatus.setText(event.getData());

}

});

}

});

engine.locationProperty().addListener(new ChangeListener<String>() {

@Override

public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

txtURL.setText(newValue);

}

});

}

});

engine.getLoadWorker().workDoneProperty().addListener(new ChangeListener<Number>() {

@Override

public void changed(ObservableValue<? extends Number> observableValue, Number oldValue,

final Number newValue) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

progressBar.setValue(newValue.intValue());

}

});

}

});

engine.getLoadWorker().exceptionProperty().addListener(new ChangeListener<Throwable>() {

public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value) {

if (engine.getLoadWorker().getState() == FAILED) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

JOptionPane.showMessageDialog(panel,

(value != null) ? engine.getLocation() + "\n" + value.getMessage()

: engine.getLocation() + "\nUnexpected error.",

"Loading error...", JOptionPane.ERROR_MESSAGE);

}

});

}

}

});

jfxPanel.setScene(new Scene(view));

}

});

}

@SuppressWarnings("restriction")

public void loadURL(final String url) {

Platform.runLater(new Runnable() {

@Override

public void run() {

String tmp = toURL(url);

if (tmp == null) {

tmp = toURL("http://" + url);

}

engine.load(tmp);

}

});

}

private static String toURL(String str) {

try {

return new URL(str).toExternalForm();

} catch (MalformedURLException exception) {

return null;

}

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

WebBowserTest browser = new WebBowserTest();

browser.setVisible(true);

browser.loadURL("baidu.com");

// http://testllservice.56linked.cn/page/highSchedule.html

// http://www.quickxs.com/page/highSchedule.html

// browser.loadURL("testllservice.56linked.cn/page/highSchedule.html");

}

});

}

}

swing 嵌入浏览器的更多相关文章

  1. 在WPF中使用CefSharp嵌入浏览器

    日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它是基于Google浏览器的一个组件,我们可以在 ...

  2. 在WPF中使用CefSharp嵌入浏览器(转)

    在WPF中使用CefSharp嵌入浏览器   日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...

  3. Java-Swing嵌入浏览器(一)

    今天要说的额是浏览器的第一个版本是用DJnative-swt和swt包开发的调用本地浏览器和webkit浏览器的示例 这是我的工程目录[源码见最后]: src下为写的源码,lib为引入的swt和DJn ...

  4. Java-Swing嵌入浏览器(二)

    这是qtjambi利用webview来做嵌入式浏览器,下面是我的工程目录. 运行效果如下图: 代码相关: package qtBowers; import com.trolltech.qt.core. ...

  5. Android WebView-应用内嵌入浏览器

    移动应用开发,web app.Native app的讨论已经很久了,纯粹的web app还很少,多少能见到Native + web混合的app,混合的app是在Native app中写一个浏览器加载 ...

  6. 在winform中使用cefsharp.winform嵌入浏览器(含视频教程)

    免费视频教程和源码: https://www.bilibili.com/video/av84573813/ 1. 开始使用CefSharp在Winform中嵌入网页 2. 解决重复打开Cefsharp ...

  7. PowerBuilder与嵌入浏览器交互

    准备工作1. 新增一个Application应用,新增一个窗口.2. 在窗口中新增一个OLE控件:Microsoft Web Browser,命名为old_1.3. 新增一个TextBox网址输入控件 ...

  8. JxBrowser之一:Java嵌入Chrome浏览器

    1.JxBrowser是一个让Java可以轻松集成Chrome浏览器的跨平台库:一般用于网络爬虫或者网页自动化测试等. 官方网址:https://jxbrowser.support.teamdev.c ...

  9. HTML5浏览器嵌入窗口程序解决方案

    浏览器嵌入窗口程序一直以来就是WEB应用程序的首选方案,这种方案只需要实现一个主窗口,并提供一些接口供脚本调用,内部的界面和逻辑处理全部用html,css,javascript去实现.我最早看到的相关 ...

随机推荐

  1. 渗透测试学习 二、Windows基础

    系统目录  服务  端口  注册表  黑客常用DOS命令(在拿到shell时会用到) 一.  系统目录 Windows目录  系统的安装目录 System32àconfigàSAM文件  是用户密码的 ...

  2. ubuntu16.04 安装java

    1.从官网下载 jdk-8u191-linux-x64.tar.gz(https://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...

  3. RabbitMQ全网资料收集

    RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准 ...

  4. 关于笔记本安装parrot和kali的一些问题(花屏,息屏,屏幕不能休眠)

    新入手了个笔记本,还是想跟原来一样装回熟悉的kali环境中,结果我的天啊,这一路坑,简直了. 写下我遇到的问题吧,算是给大家提供一些解决方法. 1.安装kali和parrot出现无法引导的grub的情 ...

  5. 使用JenKins实现自动执行python脚本

    1.使用Jenkins创建一个工程,工程主要配置项参照下图,其他配置项恢复默认 2.工程配置完成之后,点击[立即构建],执行完成后进入到控制台查看是否执行成功.

  6. Evosuite使用方法入门

    ​ Evosuite使用方法入门 ​ 1.简要介绍 EvoSuite开源工具可以基于Eclipse进行测试用例的自动生成,生成的测试用例符合Junit标准(直接生成可进行Junit的java文件),满 ...

  7. mongdb 报错“Cannot connect to the MongoDB at 192.179.1.6:27017. Error: Network is unreachable.”

    1.命令行输入talnet 192.179.1.6 27017 看能拼通不 2.防火墙添加入站规则  27017 3.修改mongdb配置文件 mongodb.config dbpath=c:\Mon ...

  8. 图像三维灰度分布图——matlab

    p=imread('C:\Users\wangd\Documents\MATLAB\1.jpg'); g=rgb2gray(p); % 转为灰阶图 gg=double(g); % 转为数值矩阵 gg= ...

  9. python 画图工具matplotlib 去掉坐标轴和坐标的方法

    1. 去掉坐标轴的方法: plt.axis('off') 2.去掉刻度的方法: plt.xticks([]) plt.yticks([]) 以上语句需要将其置于 plt.show() 之前,plt.i ...

  10. 安装rpm

    剩余 gcc-c++-3.4.6-3.1.x86_64.rpm elfutils-libelf-devel-0.97-5.x86_64.rpm glibc-2.3.4-2.41.x86_64.rpm ...