Javascript 为java应用程序创建HTML/JS接口
我正在寻找一种从html/javascript甚至jquery创建java应用程序接口的方法 我已经看到很多关于这个主题的帖子,主要是关于jxbrowser,这是一个非常好的库,但是如果我想在商业上使用它,我必须购买一个许可证 但是我没有找到像jxbrowser这样简单的库来使用。基本上,我查找了一个教程,我看到了: HTML:Javascript 为java应用程序创建HTML/JS接口,javascript,java,jquery,html,css,Javascript,Java,Jquery,Html,Css,我正在寻找一种从html/javascript甚至jquery创建java应用程序接口的方法 我已经看到很多关于这个主题的帖子,主要是关于jxbrowser,这是一个非常好的库,但是如果我想在商业上使用它,我必须购买一个许可证 但是我没有找到像jxbrowser这样简单的库来使用。基本上,我查找了一个教程,我看到了: HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8" />
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Registration Form</title>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
<link href='http://fonts.googleapis.com/css?family=Roboto:300' rel='stylesheet' type='text/css'>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<style>
body{
font:12px/15px Roboto, "Helvetica Neue", Helvetica, sans-serif;
}
select,
input,
.btn {
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
}
#wrapper{
margin:0 auto;
}
.main-form {
width: 360px;
min-height: 360px;
background: #fff;
border-radius: 60px;
margin:0px auto 20px;
padding: 20px;
}
.form-logo {
font-size: 100px;
color: #708090;
}
</style>
</head>
<body>
<script>
function newAccount() {
var firstName = document.getElementById("firstname").value;
var lastName = document.getElementById("lastname").value;
var phone = document.getElementById("phone").value;
var email = document.getElementById("email").value;
// Call Java callback function and pass text fields values.
onCreateAccount(firstName, lastName, phone, email);
}
</script>
<div id="wrapper">
<div class="main-form">
<form action="#" method="POST">
<fieldset>
<div class="text-center">
<span class="form-logo glyphicon glyphicon-user"></span>
</div>
<div class="form-body">
<h1 class="form-title text-center">New Account</h1>
<div class="form-group">
<input class="form-control" type="text" id="firstname" name="firstname" placeholder="First Name">
</div>
<div class="form-group">
<input class="form-control" type="text" id="lastname" name="surname" placeholder="Last Name">
</div>
<div class="form-group">
<input class="form-control" type="text" id="phone" name="phone" placeholder="Phone">
</div>
<div class="form-group">
<input class="form-control" type="email" id="email" name="email" placeholder="Email">
</div>
<div class="form-group text-center">
<button class="btn btn-default btn-lg" type="button" onclick="newAccount();">New Account</button>
</div>
</div>
</fieldset>
</form>
</div>
</div>
</body>
</html>
登记表
身体{
字体:12px/15px Roboto,“Helvetica Neue”,Helvetica,无衬线;
}
选择,
输入,
.btn{
字体系列:“Helvetica Neue”,Helvetica,Arial,无衬线;
}
#包装纸{
保证金:0自动;
}
.主要形式{
宽度:360px;
最小高度:360px;
背景:#fff;
边界半径:60px;
利润率:0px自动20px;
填充:20px;
}
.表格标志{
字体大小:100px;
颜色:#708090;
}
函数newAccount(){
var firstName=document.getElementById(“firstName”).value;
var lastName=document.getElementById(“lastName”).value;
var phone=document.getElementById(“phone”).value;
var email=document.getElementById(“email”).value;
//调用Java回调函数并传递文本字段值。
onCreateCount(名字、姓氏、电话、电子邮件);
}
新帐户
新帐户
爪哇:
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserFunction;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.concurrent.atomic.AtomicReference;
public class HTMLUISample {
public static void main(String[] args) {
final JFrame frame = new JFrame("HTMLUISample");
final JButton newAccountButton = new JButton("New Account...");
newAccountButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Account account = createAccount(frame);
// Displays created account's details
JOptionPane.showMessageDialog(frame, "Created Account: " + account);
}
});
JPanel contentPane = new JPanel();
contentPane.add(newAccountButton);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(contentPane, BorderLayout.CENTER);
frame.setSize(300, 75);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static Account createAccount(JFrame parent) {
final AtomicReference<Account> result = new AtomicReference<Account>();
final JDialog dialog = new JDialog(parent, "New Account", true);
// Create Browser instance.
final Browser browser = new Browser();
// Register Java callback function that will be invoked from JavaScript
// when user clicks New Account button.
browser.registerFunction("onCreateAccount", new BrowserFunction() {
@Override
public JSValue invoke(JSValue... args) {
// Read text field values received from JavaScript.
String firstName = args[0].getString();
String lastName = args[1].getString();
String phone = args[2].getString();
String email = args[3].getString();
// Create a new Account instance.
result.set(new Account(firstName, lastName, phone, email));
// Close dialog.
dialog.setVisible(false);
// Return undefined (void) to JavaScript.
return JSValue.createUndefined();
}
});
// Load HTML with dialog's HTML+CSS+JavaScript UI.
browser.loadURL("file://<path_to_file>/index.html");
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// Dispose Browser instance because we don't need it anymore.
browser.dispose();
// Close New Account dialog.
dialog.setVisible(false);
dialog.dispose();
}
});
dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
// Embed Browser Swing component into the dialog.
dialog.add(new BrowserView(browser), BorderLayout.CENTER);
dialog.setSize(400, 500);
dialog.setResizable(false);
dialog.setLocationRelativeTo(parent);
dialog.setVisible(true);
return result.get();
}
public static class Account {
public final String firstName;
public final String lastName;
public final String phone;
public final String email;
public Account(String firstName, String lastName, String phone, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.phone = phone;
this.email = email;
}
@Override
public String toString() {
return "Account{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", phone='" + phone + '\'' +
", email='" + email + '\'' +
'}';
}
}
}
导入com.teamdev.jxbrowser.chromium.Browser;
导入com.teamdev.jxbrowser.chromium.browser函数;
导入com.teamdev.jxbrowser.chromium.JSValue;
导入com.teamdev.jxbrowser.chromium.swing.BrowserView;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
导入java.util.concurrent.AtomicReference;
公共类HTML示例{
公共静态void main(字符串[]args){
最终JFrame=新JFrame(“HTMLUISample”);
最终JButton newAccountButton=新JButton(“新帐户…”);
newAccountButton.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
Account=CreateCount(框架);
//显示已创建帐户的详细信息
showMessageDialog(框架,“已创建帐户:”+帐户);
}
});
JPanel contentPane=新的JPanel();
contentPane.add(newAccountButton);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(contentPane、BorderLayout.CENTER);
框架。设置尺寸(300,75);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
私有静态帐户CreateCount(JFrame父级){
最终AtomicReference结果=新的AtomicReference();
最终JDialog对话框=新JDialog(父级,“新帐户”,true);
//创建浏览器实例。
最终浏览器=新浏览器();
//注册将从JavaScript调用的Java回调函数
//当用户单击“新建帐户”按钮时。
registerFunction(“onCreateCount”,新的BrowserFunction(){
@凌驾
公共JSValue调用(JSValue…args){
//读取从JavaScript接收的文本字段值。
String firstName=args[0]。getString();
字符串lastName=args[1]。getString();
字符串phone=args[2]。getString();
字符串email=args[3]。getString();
//创建一个新帐户实例。
结果.设置(新帐户(名字、姓氏、电话、电子邮件));
//关闭对话框。
对话框.setVisible(false);
//将未定义(void)返回到JavaScript。
返回JSValue.createUndefined();
}
});
//使用dialog的HTML+CSS+JavaScript UI加载HTML。
browser.loadURL(“file:///index.html");
addWindowListener(新的WindowAdapter(){
@凌驾
公共无效窗口关闭(WindowEvent e){
//处置浏览器实例,因为我们不再需要它。
browser.dispose();
//关闭“新建帐户”对话框。
对话框.setVisible(false);
dialog.dispose();
}
});
setDefaultCloseOperation(WindowConstants.DO\u NOTHING\u ON\u CLOSE);
//将浏览器Swing组件嵌入到对话框中。
添加(新浏览器视图,BorderLayout.CENTER);
对话框。设置大小(400500);
对话框。可设置大小(false);
对话框。setLocationRelativeTo(父级);
对话框.setVisible(true);
返回result.get();
}
公共静态类帐户{
公共最终字符串名;
公共最终字符串lastName;
公共最终字符串电话;
公开最终字符串电子邮件;
公共帐户(字符串firstName、字符串lastName、字符串phone、字符串email){
this.firstName=firstName;
this.lastName=lastName;
this.phone=电话;
this.email=电子邮件;
}
@凌驾
公共字符串toString(){
返回“帐户{”+
“firstName=”+firstName+“\”+
“,lastName='”+lastName+'\''+
“,phone=”+phone+“\”+
“,email='”+em