在Java中使用Swing嵌入浏览器,可通过多种方式实现,以下是几种常见的技术方案及应用实例:
CefApp
实例,并设置缓存路径、日志级别等初始化选项,然后通过CefBrowser
类创建浏览器窗口,加载指定URL地址。CefBrowser
组件嵌入其中。例如:// 创建Swing窗口
JFrame frame = new JFrame("嵌入浏览器示例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
// 创建CefBrowser实例并加载网页
CefBrowser browser = // 此处为创建CefBrowser的具体代码,需根据JCEF规范设置相关参数
browser.loadURL("https://www.baidu.com");
// 将浏览器组件添加到Swing窗口
frame.add(browser.getUIComponent(), BorderLayout.CENTER);
frame.setVisible(true);
text/html
时,可以显示HTML页面。通过注册HyperlinkListener
监听器,可处理超链接点击事件,实现页面跳转等功能。JEditorPane jep = new JEditorPane();
// 设置显示内容类型为HTML
jep.setContentType("text/html");
// 注册超链接监听器
jep.addHyperlinkListener(new HyperlinkListener() {
@Override
public void hyperlinkUpdate(HyperlinkEvent event) {
if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
try {
jep.setPage(event.getURL());
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
// 加载初始网页
try {
jep.setPage("https://www.baidu.com");
} catch (IOException e) {
e.printStackTrace();
}
JScrollPane scrollPane = new JScrollPane(jep);
JFrame frame = new JFrame("JEditorPane浏览器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(800, 600);
frame.setVisible(true);
不过,JEditorPane对网页中CSS的显示处理以及JavaScript脚本执行的支持较弱,适合显示简单HTML页面。
JWebBrowser webBrowser = new JWebBrowser(JWebBrowser.useWebkitRuntime())
可使用WEBKIT内核,但使用WEBKIT内核时通常要求安装Safari浏览器。import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import dj.nativeSwing.browser.MyBrowser;
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
String url = "http://www.baidu.com";
String title = "hello swing";
openForm(url, title);
}
private static void openForm(String url, String title) {
UIUtils.setPreferredLookAndFeel();
NativeInterface.open();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new MyBrowser(url), BorderLayout.CENTER);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setLocationByPlatform(true);
frame.setVisible(true);
frame.setResizable(true);
frame.setSize(1400, 700);
frame.setLocationRelativeTo(frame.getOwner());
}
});
NativeInterface.runEventPump();
}
}
JFXPanel
可以将JavaFX组件嵌入到Swing应用中。先创建JFXPanel
作为容器,再在Platform.runLater
中初始化WebView并设置场景,最后将其添加到Swing窗口中。import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class SwingTestCombine {
static WebView webView = null;
private static void gotoURL(String url) {
Platform.runLater(new Runnable() {
@Override
public void run() {
webView.getEngine().load(url);
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Java Explorer");
frame.setLayout(new BorderLayout());
frame.setSize(1400, 900);
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.setLocation(100, 20);
JFXPanel jFXPanel = new JFXPanel();
frame.add(jFXPanel, "Center");
JPanel controlPanel = new JPanel();
frame.add(controlPanel, "North");
JTextField urlField = new JTextField();
JButton goButton = new JButton("GO");
urlField.setText("input");
controlPanel.setLayout(new BorderLayout());
urlField.setPreferredSize(new Dimension(frame.getWidth() - 100, 1));
controlPanel.add(urlField, BorderLayout.WEST);
controlPanel.add(goButton, BorderLayout.EAST);
goButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String urlString = urlField.getText();
gotoURL(urlString);
}
});
urlField.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
urlField.setText("");
}
});
Platform.runLater(new Runnable() {
@Override
public void run() {
webView = new WebView();
jFXPanel.setScene(new Scene(webView));
webView.getEngine().load("https://www.baidu.com");
}
});
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if (JOptionPane.showConfirmDialog(null, "关闭?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
frame.setVisible(true);
}
}
以上代码创建了一个带有地址栏和“GO”按钮的Swing窗口,点击按钮可在嵌入的WebView中加载指定网址,默认加载百度页面。
Java Swing, 浏览器嵌入,实现方案,WebView 组件,JxBrowse
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。