需求要在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. P2257 莫比乌斯+整除分块

    #include<bits/stdc++.h> #define ll long long using namespace std; ; int vis[maxn]; int mu[maxn ...

  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>会报错

    有些时候,<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>会报错,错 ...

  3. Java_03选择结构

    1.if 选择结构 格式: if(判断条件){ // 语句块 }else if(判断条件){ // 语句块 2 }else{ // 语句块 3 } 当 if 关键字后的一对大括号里只有一个语句时,可以 ...

  4. 选择排序-C#

    选择排序包括:简单选择排序和堆排序 简单选择排序: 基本思路:从所有序列中先找到最小的,然后放到第一个位置.之后再看剩余元素中最小的,放到第二个位置……以此类推 /// <summary> ...

  5. sqlserver数据库知识点总结(转)

  6. 明令禁止下,哪些APP在违规获取用户信息?

    2019年4月28日消息  移动互联网时代各大APP大行其道,用户为了更便捷地享受互联网服务,常常需要让渡部分个人信息.在信息获取不透明的情况下,不少APP运营企业出现过度获取乃至违规获取用户信息的情 ...

  7. visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案

    一般默认比较旧有两个原因,系统版本过旧,Visual Studio 版本过旧. 第一步,将windows 更新到最新版,必须是windows 10 并且更新到最新. 第二步,将visual studi ...

  8. stolon cloud native postgresql 高可用方案

    stolon方案与patroni 类似,是一个新的pg ha 方案 包含的组件 keeper:它管理一个PostgreSQL实例,汇聚到由领导者sentinel计算的clusterview. sent ...

  9. oracle中创建数据库用户,并授权

    --查看表空间文件路径select * from dba_data_files where tablespace_name=$TABLESPACE CREATE TABLESPACE usr_aa D ...

  10. Oracle 相关知识

    1.Navicat 连接Oracle 报错: 解决办法: 1).先下载oracle客户端,win64_11gR2_client.zip,下载地址:http://www.oracle.com/techn ...