用Javascript编写Swing程序
2011-02-07 17:48
141 查看
在QT上可以使用QML语言来描述界面,而QML使用的脚本语言是javascript,不过咱们做java程序的也能使用javascript来开发swing的界面。在jdk1.6中已经带有Mozilla Rhino 的 JavaScript 脚本引擎,下面用javascript编写基于邮件服务器的测试聊天界面。
先在程序要指定要解析的脚本,Main.java
import java.io.FileInputStream;
import java.io.InputStreamReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.UIManager;
public class Main {
public static void main(String[] args) {
try {
UIManager
.setLookAndFeel(“com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel“);
ScriptEngineManager factory = new ScriptEngineManager();
// 指定脚本语言为javascript,engine支持很多种脚本语言
ScriptEngine engine = factory.getEngineByName(“JavaScript“);
// 告诉脚本引擎需要加载的脚本代码
InputStreamReader in = new InputStreamReader(new FileInputStream(
“test.js“));
engine.eval(in);
Invocable inv = (Invocable) engine;
inv.invokeFunction(“main“);
} catch (Exception e) {
e.printStackTrace();
}
}
}
test.js脚本代码
importPackage(javax.swing);
importPackage(javax.swing.border);
importPackage(java.awt.event);
importClass(java.lang.System);
var contentPane;
var messagePane;
var sentPane;
var button_1;
function main(){
var frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 542, 506);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
frame.setContentPane(contentPane);
contentPane.setLayout(null);
messagePane = new JTextPane();
messagePane.setContentType(“text/html“);
messagePane.setEditable(false);
var scrollPane1 = new JScrollPane(messagePane);
scrollPane1.setBounds(10, 10, 506, 290);
contentPane.add(scrollPane1);
sentPane = new JEditorPane();
var scrollPane = new JScrollPane(sentPane);
scrollPane.setBounds(10, 320, 506, 110);
contentPane.add(scrollPane);
var button = new JButton(“关闭“);
button.addActionListener(
new JavaAdapter(
ActionListener, {
actionPerformed : function(event){
System.exit(0);
}
}
)
);
button.setBounds(388, 435, 58, 27);
contentPane.add(button);
button_1 = new JButton(“发送“);
button_1.setEnabled(false);
button_1.setBounds(458, 435, 58, 27);
contentPane.add(button_1);
var button_2 = new JButton(“配置“);
button_2.setBounds(10, 431, 52, 30);
contentPane.add(button_2);
var button_3 = new JButton(“登录“);
button_3.setBounds(69, 433, 52, 30);
contentPane.add(button_3);
frame.setVisible(true);
}
运行效果:
效果还不错吧!
只要把规则定义好,java(swing/swt)程序也可以像QT一样,定义一套类似QML的界面描述语言,方便开发中的界面设计。
先在程序要指定要解析的脚本,Main.java
import java.io.FileInputStream;
import java.io.InputStreamReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.UIManager;
public class Main {
public static void main(String[] args) {
try {
UIManager
.setLookAndFeel(“com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel“);
ScriptEngineManager factory = new ScriptEngineManager();
// 指定脚本语言为javascript,engine支持很多种脚本语言
ScriptEngine engine = factory.getEngineByName(“JavaScript“);
// 告诉脚本引擎需要加载的脚本代码
InputStreamReader in = new InputStreamReader(new FileInputStream(
“test.js“));
engine.eval(in);
Invocable inv = (Invocable) engine;
inv.invokeFunction(“main“);
} catch (Exception e) {
e.printStackTrace();
}
}
}
test.js脚本代码
importPackage(javax.swing);
importPackage(javax.swing.border);
importPackage(java.awt.event);
importClass(java.lang.System);
var contentPane;
var messagePane;
var sentPane;
var button_1;
function main(){
var frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 542, 506);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
frame.setContentPane(contentPane);
contentPane.setLayout(null);
messagePane = new JTextPane();
messagePane.setContentType(“text/html“);
messagePane.setEditable(false);
var scrollPane1 = new JScrollPane(messagePane);
scrollPane1.setBounds(10, 10, 506, 290);
contentPane.add(scrollPane1);
sentPane = new JEditorPane();
var scrollPane = new JScrollPane(sentPane);
scrollPane.setBounds(10, 320, 506, 110);
contentPane.add(scrollPane);
var button = new JButton(“关闭“);
button.addActionListener(
new JavaAdapter(
ActionListener, {
actionPerformed : function(event){
System.exit(0);
}
}
)
);
button.setBounds(388, 435, 58, 27);
contentPane.add(button);
button_1 = new JButton(“发送“);
button_1.setEnabled(false);
button_1.setBounds(458, 435, 58, 27);
contentPane.add(button_1);
var button_2 = new JButton(“配置“);
button_2.setBounds(10, 431, 52, 30);
contentPane.add(button_2);
var button_3 = new JButton(“登录“);
button_3.setBounds(69, 433, 52, 30);
contentPane.add(button_3);
frame.setVisible(true);
}
运行效果:
效果还不错吧!
只要把规则定义好,java(swing/swt)程序也可以像QT一样,定义一套类似QML的界面描述语言,方便开发中的界面设计。
相关文章推荐
- 用JavaScript编写JVM可成功运行Java程序
- 编写高质量代码:改善JavaScript程序的188个建议
- 关于高清在线播放器:[迅播播放器][可使用javascript调用][完全兼容asp,jsp,php,.net等主流语言编写的程序]
- 用javascript语言编写一个小程序:在一个文本框(用户名框)中按回车键时,跳转到另一个文本框(密码框)中,密码框回车之后,打一个登陆成功。点击button也是登陆成功。
- emacs编写java swing程序
- Javascript编写的清空cookie的小程序,非常简单实用
- 编写高效的JavaScript程序
- 编写第一个JavaScript程序
- 编写高质量代码:改善JavaScript程序建议--面向对象编程
- [实战分析] 编写高效的JavaScript程序
- 用swing组件来编写的QQ登陆程序
- JavaScript强化教程——编写第一个jQuery程序
- 编写高效的JavaScript程序
- Linux(Ubuntu)下,让Swing和Swt编写的Java桌面程序运行
- 用JavaScript编写程序实现文本滚动
- 纯javascript代码编写计算器程序
- 用Javascript编写的程序(计算器和验证非法字符)
- 编写高效的JavaScript程序
- 使用Swing组件编写一个支持中文文本编辑程序ChineseTextEdit.java
- [实战分析] 编写高效的JavaScript程序