posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          用javascript編寫swing程序

          Posted on 2010-12-25 12:30 penngo 閱讀(4491) 評論(2)  編輯  收藏 所屬分類: Java
          在QT上可以使用QML語言來描述界面,而QML使用的腳本語言是javascript,不過咱們做java程序的也能使用javascript來開發swing的界面。在jdk1.6中已經帶有Mozilla Rhino 的 JavaScript 腳本引擎,下面用javascript編寫上一編基于郵件服務器的聊天測試http://www.aygfsteel.com/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(
          100100542506);
              contentPane 
          = new JPanel();
              contentPane.setBorder(
          new EmptyBorder(5555));
              frame.setContentPane(contentPane);
              contentPane.setLayout(
          null);
              
              messagePane 
          = new JTextPane();
              messagePane.setContentType(
          "text/html");
              messagePane.setEditable(
          false);
              var scrollPane1 
          = new JScrollPane(messagePane);
              scrollPane1.setBounds(
          1010506290);
              contentPane.add(scrollPane1);
              
              sentPane 
          = new JEditorPane();
              var scrollPane 
          = new JScrollPane(sentPane);
              scrollPane.setBounds(
          10320506110);
              contentPane.add(scrollPane);
              var button 
          = new JButton("關閉");
              button.addActionListener(
                      
          new JavaAdapter(
                              ActionListener, {
                                  actionPerformed : function(event){
                                      System.exit(
          0);
                                  }
                              }
                      )
              );
              button.setBounds(
          3884355827);
              contentPane.add(button);
              
              button_1 
          = new JButton("發送");
              button_1.setEnabled(
          false);
              
              button_1.setBounds(
          4584355827);
              contentPane.add(button_1);
              
              var button_2 
          = new JButton("配置");
              button_2.setBounds(
          104315230);
              contentPane.add(button_2);
              
              var button_3 
          = new JButton("登錄");
              button_3.setBounds(
          694335230);
              contentPane.add(button_3);
              
              frame.setVisible(
          true);

          運行效果:


          效果還是跟以前一樣帥,

          只要把規則定義好,java(swing/swt)程序也可以像QT一樣,定義一套類似QML的界面描述語言,方便開發中的界面設計。

          附件:源碼

          評論

          # re: 用javascript編寫swing程序  回復  更多評論   

          2010-12-27 02:15 by Unmi
          很有新意,我也曾經對比了各種腳本+界面的做法。

          # re: 用javascript編寫swing程序  回復  更多評論   

          2010-12-29 19:31 by thebye85
          用JS寫QT,有意思啊
          主站蜘蛛池模板: 江城| 南平市| 滕州市| 土默特左旗| 吉安县| 赣榆县| 仁怀市| 阿拉尔市| 五台县| 神池县| 新平| 九台市| 安化县| 蒙山县| 界首市| 乌兰察布市| 南漳县| 平邑县| 柳河县| 永善县| 福鼎市| 威信县| 北宁市| 鄂温| 宁陵县| 巴彦县| 梁山县| 贺兰县| 扎兰屯市| 加查县| 梁河县| 庆安县| 天峨县| 中宁县| 称多县| 府谷县| 罗田县| 广昌县| 珲春市| 江城| 娱乐|