当前位置: 代码迷 >> Java相关 >> 用Javascript编写Swing程序
  详细解决方案

用Javascript编写Swing程序

热度:160   发布时间:2011-01-29 20:49:23.0
用Javascript编写Swing程序
在QT上可以使用QML语言来描述界面,而QML使用的脚本语言是javascript,不过咱们做java程序的也能使用javascript来开发swing的界面。在jdk1.6中已经带有Mozilla Rhino 的 JavaScript 脚本引擎,下面用javascript编写基于邮件服务器的测试聊天界面。YPP就爱技术网

  先在程序要指定要解析的脚本,Main.javaYPP就爱技术网

import java.io.FileInputStream;YPP就爱技术网
import java.io.InputStreamReader;YPP就爱技术网
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就爱技术网
搜索更多相关的解决方案: javascript  服务器  

----------------解决方案--------------------------------------------------------