一个脚本
import Package(java.awt, java.awt.event)
import Package(Packages.javax.swing)
import Class(java.lang.System)
import Class(java.lang.reflect.Constructor)
function buildPluginMenu(){
var menuPlugin = new JMenu();
menuPlugin.setText("Plugin");
var menuItemListPlugin = new JMenuItem();
menuItemListPlugin.setText("list plugins");
menuItemListPlugin.addActionListener(
new JavaAdapter(
ActionListener, {
actionPerformed : function(event){
var plFrame = new JFrame("plugins list");
var epNote = new JEditorPane();
var s = "";
for(var i = 0; i<pluginList.size();i++){
var pi = pluginList.get(i);
s += pi.getName()+":"+pi.getDescription()+"\n";
}
epNote.setText(s);
epNote.setEditable(false);
plFrame.add(epNote, BorderLayout.CENTER);
plFrame.setSize(200,200);
plFrame.setLocationRelativeTo(null);
plFrame.setVisible(true);
}
}
)
);
menuPlugin.add(menuItemListPlugin);
return menuPlugin;
}
//this function will be invoked from java code, MainFrame...
function _customizeMenuBar_(menuBar){
menuBar.add(buildPluginMenu());
}
我们在脚本中创建一个菜单项,名称为 plugin,这个菜单项中有一个名为 list plugins 的项目,点击之后会弹出一个对话框,显示目前被应用到 sTodo 中的插件(脚 本):
图 4. 点击 list plugins
使用JavaScript脚本化Java应用(7)
时间:2011-04-03 IBM 邱俊涛
图 5. 显示目前被应用到 sTodo 中的插件(脚本)
为了保证 list plugins 的功能,我在 initEnv() 方法中加入了另一个插件 style.js。因此我们可以看到,弹出的窗口正确的显示了目前被加载的插件,这些信息均 来自于宿主程序!
提供第二个脚本
通常情况下,您可能已经有了一个写的比较好的应用模块,而想要在另一个应用中使 用这个模块,比如您有一个 org.free.something 的包,里边已经包含了您写的某个面板 ,其中包含版权信息声明等。现在您开发出了另一个应用,如果把两者集成那就最好了。
我们开发的第二个插件就是涉及如何引用外部包的问题:
比如,我们已经有了一个良好的 Help 界面,定义如下:
代码 7. 一个已有的 Dialog
public class HelpDialog extends JDialog{
private static final long serialVersionUID = - 146997705470075999L;
private JFrame parent;
public HelpDialog(JFrame parent, String title){
super(parent, title, true);
this.parent = parent;
initComponents();
}
private void initComponents(){
setSize(200, 200);
add(new JLabel("Here is the help content..."), BorderLayout.NORTH);
JButton button = new JButton("Click to close help.");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
|