有2个java GUI程序 A和B。目前有个需求,就是要捕获Java GUI(A)程序(多文档界面,还有模态弹出窗口)的所有鼠标,键盘事件。
原因是要发现当前Java GUI(A)的所有事件来通知另外一个Java程序(B)这里有操作在进行,不要B自动关闭A。请问怎样实现呢?简而言之,就是有没有简单方法捕获Java GUI (多文档,还有模态弹出窗口)的所有鼠标,键盘事件。谢谢先!

解决方案 »

  1.   

    你把A程序做成被观察者,B程序当成观察者,当A程序监听的事件触发的时候,通知观察者,这样应该可以
      

  2.   

    将A类实现多个接口就可以了,好像class A implements ActionListener, MouseListener...等等。
    让后在A类里面传入B的引用,在时间触发的时候,通知B类做相应的事情就可以了。
    希望对你有帮助。如果不明白再联系啊
      

  3.   


    谢谢,我这里需要说明一下,A和B是相对独立的Java application,互相调用是不可能,不过它们之间的交互不是问题。所以,现在我的主要问题是不知道怎么用简单的方法捕获A 里所有的用户动作事件。然后,通知B就可以。
      

  4.   

    A是支持多文档的application,直接生成class A implements ActionListener, MouseListener...,那么它的JinternalFrame里的控件的事件怎么捕获呢?我的感觉是想一个事件的集中过滤,(主要用于通知B),而真正的事件处理还是要控件自己来处理。
      

  5.   

    捕捉 AWTEvent 可以满足你
    示例:
    getToolkit().addAWTEventListener(new AWTEventListener() {

    @Override
    public void eventDispatched(AWTEvent event) {
    // TODO Auto-generated method stub

    }
    }, AWTEvent.MOUSE_EVENT_MASK);剩下的你自己琢磨下就明白了
      

  6.   

     addAWTEventListener 里有这样的说明:注:对于一般的应用程序,不推荐使用事件侦听器,它只用于支持特定目的工具,包括支持可访问性、事件记录/回放和诊断跟踪。如果 listener 为 null,则不抛出任何异常,且不执行任何操作。这样使用不会有问题吧?
      

  7.   


    使用这样方法有以下问题:
    它会捕捉当前界面上的所有同类型事件,
    因此,如果你直接捕捉了AWTEvent,
    在 eventDispatched 方法内处理完后,该事件就不会向其源控件继续派发了意思就是:
    比如你用 AWTEventListener 处理了所有的鼠标事件,
    那你在各个子控件上再 addMouseListener ,这时,这里将无法捕捉到鼠标事件了说通俗点:
    你用 AWTEventListener 捕捉了所有的鼠标事件后,
    所有子控件的 MouseListener 将失效,
    所有的事件都必须要在 AWTEventListener 的 eventDispatched 方法中统一处理
      

  8.   

    引用 6 楼 sunyiz 的回复:捕捉 AWTEvent 可以满足你
    示例:
    Java code
    getToolkit().addAWTEventListener(new AWTEventListener() {@Override
    public void eventDispatched(AWTEven……