`

高深的东西,目前还不能理解。。。。

    博客分类:
  • aop
阅读更多
public class ScriptTest
{
    public static void main(final String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                String language;
                if (args.length == 0)
                    language = "js";
                else
                    language = args[0];
                // 脚本控制类
                ScriptEngineManager manager = new ScriptEngineManager();
                System.out.println("Available factories :");
                for (ScriptEngineFactory factory : manager.getEngineFactories())
                    System.out.println(factory.getEngineName());
                final ScriptEngine engine = manager.getEngineByName(language);
                
                if (engine == null)
                {
                    System.err.println("No engine for " + language);
                    System.exit(1);
                }
                ButtonFrame frame = new ButtonFrame();
                try
                {
                    // TODO 添加文件
                    File initFile = new File("init." + language);
                    if (initFile.exists())
                    {
                        engine.eval(new FileReader(initFile));
                    }
                    getComponentBindings(frame, engine);
                    final Properties events = new Properties();
                    // TODO 添加文件
                    InputStream in = ScriptTest.class.getResourceAsStream(language + ".properties");
                    events.load(in);
                    for (final Object e : events.keySet())
                    {
                        // 添加时间
                        String[] s = ((String)e).split("\\.");
                        addListener(s[0], s[1], (String)events.get(e), engine);
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setTitle("ScriptTest");
                frame.setVisible(true);
            }
        });
    }
    
    /** 把所有已命名的组件放在同一个容器中 */
    private static void getComponentBindings(Component c, ScriptEngine engine)
    {
        String name = c.getName();
        if (name != null)
            engine.put(name, c);
        if (c instanceof Container)
        {
            // 回调
            for (Component child : ((Container)c).getComponents())
                getComponentBindings(child, engine);
        }
    }
    
    /** 为对象添加一个事件,监听到方法执行脚本 */
    private static void addListener(String beanName, String eventName, final String scriptCode,
        final ScriptEngine engine)
        throws IllegalArgumentException, IntrospectionException, IllegalAccessException, InvocationTargetException
    {
        Object bean = engine.get(beanName);
        EventSetDescriptor descriptor = getEventSetDescriptor(bean, eventName);
        if (descriptor == null)
            return;
        descriptor.getAddListenerMethod().invoke(bean,
            Proxy.newProxyInstance(null, new Class[] {descriptor.getListenerType()}, new InvocationHandler()
            {
                
                @Override
                public Object invoke(Object proxy, Method method, Object[] args)
                    throws Throwable
                {
                    engine.eval(scriptCode);
                    return null;
                }
                
            }));
    }
    
    private static EventSetDescriptor getEventSetDescriptor(Object bean, String eventName)
        throws IntrospectionException
    {
        for (EventSetDescriptor descriptor : Introspector.getBeanInfo(bean.getClass()).getEventSetDescriptors())
            if (descriptor.getName().equals(eventName))
                return descriptor;
        return null;
        
    }
    
}

 ButtonFrame类:

 

package script;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ButtonFrame extends JFrame
{
    private static final long serialVersionUID = 1L;
    
    private static final int DEFAULT_WIDTH = 300;
    
    private static final int DEFAULT_HELGHT = 200;
    
    private JPanel panel;
    
    private JButton yellowButton;
    
    private JButton blueButton;
    
    private JButton redButton;
    
    public ButtonFrame()
    {
        setSize(DEFAULT_WIDTH, DEFAULT_HELGHT);
        panel = new JPanel();
        panel.setName("panel");
        add(panel);
        
        yellowButton = new JButton("Yellow");
        yellowButton.setName("yellowButton");
       
        blueButton = new JButton("Blue");
        blueButton.setName("blueButton");
        
        redButton = new JButton("Red");
        redButton.setName("redButton");
        
        panel.add(yellowButton);
        panel.add(blueButton);
        panel.add(redButton);
    }
}

 

 

js.properties

yellowButton.action=panel.background=java.awt.Color.YELLOW
blueButton.action=panel.background=java.awt.Color.BLUE
redButton.action=panel.background=java.awt.Color.RED

分享到:
评论

相关推荐

    嵌入式系统理解.pdf

    驱动层比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导致其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的...

    嵌入式要学哪些东西?

    通过上述阶段的学习,不仅可以建立起扎实的专业基础,还能逐步培养出解决问题的实际能力。值得注意的是,成为一名真正的嵌入式专家并非一蹴而就的过程,而是需要长期不懈的努力和持续学习的态度。希望每位有志于从事...

    想学口语就看必备的东西

    27. **It isn't much.**(并不多):谦虚地形容所提供的东西不多。 28. **Neck and neck.**(不分上下):形容双方势均力敌。 29. **I'm feeling under the weather.**(我感觉不舒服):表达身体不适。 30. **Don't...

    GPT是个什么东西?什么时候可以替我去上班?

    尽管GPT在许多任务中展现出令人印象深刻的能力,但目前的技术水平还不足以让它完全取代人类去上班。尽管它可以处理一些重复性的文本工作,如编写报告或回复邮件,但复杂的问题解决、创新思考以及人际交互仍然是人工...

    基于Python的对网络评论情感分析:主题与情感词抽取.zip

    tensorflow 比 keras 强大,不能只学 keras 这种傻瓜式的高层接口,还是要学习下底层的具体的东西,能实现的东西要更灵活,对模型的理解也更深刻。 详细介绍参考:...

    类似SYP++的东西

    描述中提到“一个类似SPY++的东西不太完善”,这意味着我们讨论的可能是一个开源或第三方开发的工具,它试图模仿SPY++的功能,但目前可能存在一些不足或者未实现的功能。这些可能包括: 1. **功能缺失**:可能缺少...

    自动驾驶相关的东西们.zip

    本压缩包“自动驾驶相关的东西们.zip”提供了一系列自动驾驶算法的研究和项目源码,对于学习者来说,这是一个宝贵的资源库,可以帮助深入理解并实践自动驾驶的核心技术。 1. **自动驾驶算法**:自动驾驶的核心在于...

    ssm的整合SSM.zip

    这是目前这一步所需要的所有配置,如果需要可下载,希望可以帮助到大家,不需要币,给个赞呗,这是对上个月自己学的东西巩固,通过敲一遍代码,然后再将分析一步步地在博客上面分析下来,发现其实ssm并没有那么难,...

    哈哈~离散数学答案 好东西啊

    即使我们目前可能无法确定其真值,但这个真值是客观存在的。 - **真值的确定性**:某些命题的真值我们能够立即判断,如“2+2=4”,这是一个明显的真命题。而有些命题的真值可能需要更多的信息才能判断,但一旦条件...

    GNU Make 使用手册(中译版)

    目前,在网上虽然有一些著作,但都不能全面的解释Linux源代码中各级的Makefile文件,因此本人认真阅读了GNU Make 使用手册(3.79)版原文,在此基础上翻译了该手册,以满足对Linux源代码有兴趣或者希望采用GCC编写...

    amba简介不错的东西

    描述中的“不错的东西,建议大家好好看看,背一背,理解一下,找相应的工具”,表明文档的内容是有教育和实用价值的,需要读者深入学习和实践应用。而标签“amba簡介”进一步确认了文档讨论的主题是AMBA。 然而,...

    需求调研步骤和方法

    平静面对需求变更的心态,在需求调研过程中,往往双方对需求理解不一致,造成需求调研前后矛盾,应当心平气和的去引导客户,达到需求理解基本一致。 三、提高 1. 提高自己业务知识,对于人力资源的标准业务应该基本...

    android小东西

    在Android开发领域,"android小东西"可能是指一系列基础的界面转换技巧和概念。这些技巧对于初学者或者有一定Java基础的开发者来说是非常实用的,能够帮助他们更好地理解和掌握Android应用的用户界面(UI)设计与...

    A Brief History Of Time

    不确定性原理是量子力学中的基本原理之一,它指出不能同时精确测量粒子的位置和动量。这一原理打破了经典物理学中确定性的观念,意味着在微观层面上,粒子的行为具有随机性。不确定性原理对于理解量子世界至关重要,...

    纳米机器人--一种新型存放东西的网盘

    首先,让我们理解什么是纳米机器人。纳米机器人,或称为纳米机械,是指在纳米尺度上设计和制造的机器人,通常在1到100纳米之间,这大约是分子和细胞结构的尺寸。这些微小的设备由分子或原子级别的组件构成,具备自主...

    GPT-4在使用体验上比 GPT-3.5 强多少

    在使用体验上是比 GPT-3.5 强的。但还是经常遇到问题,且响应速度会...直接把这个要求扔给GPT,给我产生了一坨根本不能用的东西。它的理解力是有局限的。 我必须把流程给它说个明白,相当于用自然语言搞了一套伪代码。

    网易文本分类数据 - 好东西

    描述中提到“数据堂已经打不开了,以前备份留下来的网易文本分类数据,dataid=602151”,意味着这个数据集最初可能是在一个名为“数据堂”的网站上提供的,但该网站目前可能已无法访问。dataid=602151是一个特定的...

    misc:随机东西的存储库

    杂项 由 dan-simon 创建的随机资料库。 文件夹“b” 在文件夹“b”中有一个名为“Ass Eat”的游戏,它模仿了 Hevipelle... 我当然不能。 加密 使用默认 7z 压缩和加密系统加密的文件,这可能是不安全的。 你能解码吗?

    EOMapX GIS组件

    好长时间都想自己写一个GIS的组件,一直没有什么机会,最近有了点动作,很多东西来不及。EOMapX 基本上接口很少,大多数都依赖于方法和属性,这样比较符合我们的习惯(简单) ...相信大家能有所理解。

Global site tag (gtag.js) - Google Analytics