用javascript編寫swing程序

在QT上能夠使用QML語言來描述界面,而QML使用的腳本語言是javascript,不過我們作java程序的也能使用javascript來開發swing的界面。在jdk1.6中已經帶有Mozilla Rhino 的 JavaScript 腳本引擎,下面用javascript編寫上一編 基於郵件服務器的聊天測試http://www.blogjava.net/pengo/archive/2010/12/11/340303.html 界面。

先在程序要指定要解析的腳本,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的界面描述語言,方便開發中的界面設計。

附件: 源碼

pengo 2010-12-25 12:30 發表評論
相關文章
相關標籤/搜索