基于 Web 的 Java Swing Kiosk 应用程序
在本文中,我们将展示如何使用 Java Swing GUI 工具包和我们基于 Chromium 引擎的库 — JxBrowser 创建一个跨桌面Kiosk应用程序,该应用程序可在 Windows、Linux 和 Mac OS X 上运行,并显示现代 Web 内容。
Kiosk 应用程序广泛用于银行、教育、零售、旅游和娱乐等行业,用作信息点、POS 和产品促销工具。 只要有可能通过自动交易来增强人工服务,Kiosk就会发挥作用。 如今,通过专门的自助机器购买电影票、在大型商店挑选衣服、或在几分钟内办理登机手续的情况并不少见。 当然是业界已知的调整和技巧。 我们经常被问到这样一个问题,即如何使基于浏览器的应用程序以 Kiosk模式运行。 与在专门的Kiosk开发平台上构建的应用程序相比,这样的应用程序更容易支持、维护和升级。
在本文中,我们将展示如何使用 Java Swing GUI 工具包和我们基于 Chromium 引擎的库 — JxBrowser
创建一个跨桌面Kiosk应用程序,该应用程序可在 Windows、Linux 和 Mac OS X 上运行,并显示现代 Web 内容。
Kiosk应用程序要求
您可以使用许多技术和工具来构建Kiosk应用程序。 通常,Kiosk应用程序的主要要求是它不应允许终端用户切换到环境中运行的其他应用程序(管理员可能能够与其他软件交互,但不能与终端用户交互)。 因此,您需要显示一个未经修饰的全屏窗口,不允许终端用户与在此环境中安装和运行的其他软件进行交互。
用Java Swing创建一个Kiosk
使用 Java Swing GUI 创建跨桌面Kiosk应用程序非常简单。 您需要做的就是创建 javax.swing.JFrame 实例,使其全屏/最大化、不可调整大小、最上层,并删除窗口装饰,如标题、窗口边框等。Java Swing API 提供了所有必要的功能。 以下示例代码演示了如何使用 Java Swing 创建一个简单的Kiosk用程序:
import javax.swing.*;
import java.awt.*;
public class KioskApp {
public static void main(String[] args) {
JFrame frame = new JFrame();
// Remove window title and borders
frame.setUndecorated(true);
// Make frame topmost
frame.setAlwaysOnTop(true);
// Disable Alt+F4 on Windows
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
// Make frame full-screen
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
// Display frame
frame.setVisible(true);
}
在 Kiosk 中显示 Web 内容
使用上述代码构建的Kiosk应用程序不显示任何内容。 为了给我们的应用程序提供显示网页内容的能力,我们可以使用一个允许显示 HTML 内容的标准的 Java Swing 组件 ( javax.swing.JEditorPane ),,但它有很多限制,并不总是能正确显示基于 HTML5、CSS3 或 JavaScript 的网页内容。 相反,我们可以使用 JxBrowser 库。 JxBrowser 允许 Java 开发人员将基于 Chromium 的 Swing/JavaFX 组件嵌入到 Java 应用程序中,以显示使用 HTML5、CSS3、JavaScript、Flash、Silverlight 等构建的网页。
让我们修改上面的代码并引入允许显示 Web 内容的功能。 我们将添加两个按钮:Google 和 BBC News。 当用户按下 Google 按钮时,我们将让应用程序显示 Google 搜索页面。 当用户按下 BBC News按钮时,应用程序将显示 BBC 新闻主页,用户可以在其中阅读最新新闻。
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class KioskApp {
public static void main(String[] args) {
// Create Browser instance
final Browser browser = new Browser();
// Create Google and BBC News buttons
JButton googleButton = new JButton("Google");
googleButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
browser.loadURL("https://www.google.com");
JButton bbcButton = new JButton("BBC News");
bbcButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
browser.loadURL("http://www.bbc.com/news");
JPanel actionPane = new JPanel();
actionPane.add(googleButton);
actionPane.add(bbcButton);
JFrame frame = new JFrame();
frame.add(actionPane, BorderLayout.WEST);
frame.add(new BrowserView(browser), BorderLayout.CENTER);
// Remove window title and borders
frame.setUndecorated(true);
// Make frame topmost
frame.setAlwaysOnTop(true);
// Disable Alt+F4 on Windows
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);