首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDK 6 Scripting API 實戰:為 Swing 應用注入 JavaScript 動態擴展能力

     編輯:Java 相關知識

示範如何使用 JDK 6 內建 Script Engine 為 Java Swing 應用建立外掛機制,透過 JavaScript 動態修改選單、載入外部元件,實現輕量級腳本化擴展。

專案背景:sTodo 待辦事項管理器

  • Swing + SQLite 嵌入式資料庫。
  • 功能:CRUD 待辦事項、郵件發送。
  • 目標:加入外掛框架,允許腳本動態擴充選單、整合外部元件。

外掛框架設計

interface Plugin {
  String getName(), getDescription();
  void putValueToContext(String key, Object obj);
  Object execute(String function, Object... args);
  List<String> getAvailiableFunctions();
}

interface PluginManager {
  void install/uninstall/activate/deactivate(Plugin);
  Plugin getPlugin(String name);
  List<Plugin> listPlugins();
}

核心實作

  • TodoPluginManager:單例管理外掛清單。
  • TodoPlugin:包裝 ScriptEngine (Rhino JS),載入 .js 檔,提供 execute() 呼叫 JS 函式。
  • RuntimeEnv:靜態取得 ScriptEngine 與 Invocable。

腳本化流程

  1. 啟動時 initEnv() 建立 menubar.js 外掛,放入 pluginList 至 Context。
  2. MainFrame 將 JMenuBar 實例傳給外掛 _customizeMenuBar_(menuBar)。
  3. JS 建立選單項,事件處理器使用 JavaAdapter 實作 Java 介面 (如 ActionListener)。

腳本範例:menubar.js

importPackage(javax.swing);
importPackage(java.awt.event);

function buildPluginMenu() {
  var menu = new JMenu("Plugin");
  var item = new JMenuItem("list plugins");
  item.addActionListener(new JavaAdapter(ActionListener, {
    actionPerformed: function(e) {
      var frame = new JFrame("plugins list");
      var pane = new JEditorPane();
      var s = "";
      for (var i=0; i<pluginList.size(); i++) {
        var p = pluginList.get(i);
        s += p.getName() + ": " + p.getDescription() + "\n";
      }
      pane.setText(s); pane.setEditable(false);
      frame.add(pane); frame.setSize(200,200); frame.setVisible(true);
    }
  }));
  menu.add(item);
  return menu;
}

function _customizeMenuBar_(menuBar) {
  menuBar.add(buildPluginMenu());
  menuBar.add(buildHelpMenu()); // 第二個腳本整合外部 HelpDialog
}

整合外部 JAR 元件

importPackage(Packages.org.someone.dialog);
var dlg = new HelpDialog(null, "This is Help");

無需修改 Java 代碼即可動態載入第三方 Swing 元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved