用Javascript编写Swing程序
在QT上可以使用QML语言来描述界面,而QML使用的脚本语言是javascript,不过咱们做java程序的也能使用javascript来开发swing的界面。在jdk1.6中已经带有Mozilla Rhino 的 JavaScript 脚本引擎,下面用javascript编写基于邮件服务器的测试聊天界面。YPP就爱技术网先在程序要指定要解析的脚本,Main.javaYPP就爱技术网
import 就爱技术网
import 就爱技术网
import javax.script.Invocable;YPP就爱技术网
import javax.script.ScriptEngine;YPP就爱技术网
import javax.script.ScriptEngineManager;YPP就爱技术网
import javax.swing.UIManager;YPP就爱技术网
YPP就爱技术网
public class Main {YPP就爱技术网
public static void main(String[] args) {YPP就爱技术网
try {YPP就爱技术网
UIManagerYPP就爱技术网
.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");YPP就爱技术网
ScriptEngineManager factory = new ScriptEngineManager();YPP就爱技术网
// 指定脚本语言为javascript,engine支持很多种脚本语言YPP就爱技术网
ScriptEngine engine = factory.getEngineByName("JavaScript");YPP就爱技术网
// 告诉脚本引擎需要加载的脚本代码YPP就爱技术网
InputStreamReader in = new InputStreamReader(new FileInputStream(YPP就爱技术网
"test.js"));YPP就爱技术网
engine.eval(in);YPP就爱技术网
Invocable inv = (Invocable) engine;YPP就爱技术网
inv.invokeFunction("main");YPP就爱技术网
} catch (Exception e) {YPP就爱技术网
YPP就爱技术网
e.printStackTrace();YPP就爱技术网
test.js脚本代码 importPackage(javax.swing);YPP就爱技术网
importPackage(javax.swing.border);YPP就爱技术网
importPackage(java.awt.event);YPP就爱技术网
importClass(java.lang.System);YPP就爱技术网
YPP就爱技术网
var contentPane;YPP就爱技术网
var messagePane;YPP就爱技术网
var sentPane;YPP就爱技术网
var button_1;YPP就爱技术网
YPP就爱技术网
function main(){YPP就爱技术网
var frame = new JFrame();YPP就爱技术网
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);YPP就爱技术网
frame.setBounds(100, 100, 542, 506);YPP就爱技术网
contentPane = new JPanel();YPP就爱技术网
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));YPP就爱技术网
frame.setContentPane(contentPane);YPP就爱技术网
contentPane.setLayout(null);YPP就爱技术网
YPP就爱技术网
messagePane = new JTextPane();YPP就爱技术网
messagePane.setContentType("text/html");YPP就爱技术网
messagePane.setEditable(false);YPP就爱技术网
var scrollPane1 = new JScrollPane(messagePane);YPP就爱技术网
scrollPane1.setBounds(10, 10, 506, 290);YPP就爱技术网
contentPane.add(scrollPane1);YPP就爱技术网
YPP就爱技术网
sentPane = new JEditorPane();YPP就爱技术网
var scrollPane = new JScrollPane(sentPane);YPP就爱技术网
scrollPane.setBounds(10, 320, 506, 110);YPP就爱技术网
contentPane.add(scrollPane);YPP就爱技术网
var button = new JButton("关闭");YPP就爱技术网
button.addActionListener(YPP就爱技术网
new JavaAdapter(YPP就爱技术网
ActionListener, {YPP就爱技术网
actionPerformed : function(event){YPP就爱技术网
System.exit(0);YPP就爱技术网
}YPP就爱技术网
}YPP就爱技术网
)YPP就爱技术网
);YPP就爱技术网
button.setBounds(388, 435, 58, 27);YPP就爱技术网
contentPane.add(button);YPP就爱技术网
YPP就爱技术网
button_1 = new JButton("发送");YPP就爱技术网
button_1.setEnabled(false);YPP就爱技术网
YPP就爱技术网
button_1.setBounds(458, 435, 58, 27);YPP就爱技术网
contentPane.add(button_1);YPP就爱技术网
YPP就爱技术网
var button_2 = new JButton("配置");YPP就爱技术网
button_2.setBounds(10, 431, 52, 30);YPP就爱技术网
contentPane.add(button_2);YPP就爱技术网
YPP就爱技术网
var button_3 = new JButton("登录");YPP就爱技术网
button_3.setBounds(69, 433, 52, 30);YPP就爱技术网
contentPane.add(button_3);YPP就爱技术网
YPP就爱技术网
frame.setVisible(true);YPP就爱技术网
}YPP就爱技术网
运行效果:YPP就爱技术网
YPP就爱技术网
效果还不错吧!YPP就爱技术网
只要把规则定义好,java(swing/swt)程序也可以像QT一样,定义一套类似QML的界面描述语言,方便开发中的界面设计。YPP就爱技术网