想要javax.swing钩子来告诉我层次结构中的哪个组件正在执行一个操作吗

想要javax.swing钩子来告诉我层次结构中的哪个组件正在执行一个操作吗,java,swing,swing-app-framework,Java,Swing,Swing App Framework,我如何在一个Swing程序中编写一个调试钩子,告诉我层次结构中的哪个组件实际上在处理每个击键或鼠标单击,并执行组件动作映射中映射到它的动作,这样就可以将代码丑化程度降到最低?我们正在编写一个复杂的GUI,了解这些信息将非常有用。放入一个自定义事件调度器: 还要在API文档中查找AWTEvent.getID()、MouseEvent和KeyEvent 这就是我使用的软件如何监视鼠标和键盘,以查看用户是否正忙着工作,如果不忙,则锁定窗口。放入自定义事件调度器: 还要在API文档中查找AWTEve

我如何在一个Swing程序中编写一个调试钩子,告诉我层次结构中的哪个组件实际上在处理每个击键或鼠标单击,并执行组件动作映射中映射到它的动作,这样就可以将代码丑化程度降到最低?我们正在编写一个复杂的GUI,了解这些信息将非常有用。

放入一个自定义事件调度器:

还要在API文档中查找AWTEvent.getID()、MouseEvent和KeyEvent


这就是我使用的软件如何监视鼠标和键盘,以查看用户是否正忙着工作,如果不忙,则锁定窗口。

放入自定义事件调度器:

还要在API文档中查找AWTEvent.getID()、MouseEvent和KeyEvent


这就是我使用的软件如何监视鼠标和键盘以查看用户是否正在忙,如果用户不忙,则锁定窗口。

使用AspectJ将日志方面编织到代码库中是可以做到的。下面是使用代码库中的方法
actionPerformed(ActionEvent)
执行任何对象时对连接点的建议示例。类似的结构可以用来建议其他听众

下面是建议按钮按下和具有ActionListener的其他组件的方面。它只输出操作源的类名和actionPerformed方法的签名

import java.awt.event.ActionEvent;

import org.aspectj.lang.Signature;

public aspect Logger {
  before(ActionEvent e) : execution(* *.actionPerformed(ActionEvent)) && args(e) {
    Signature sig = thisJoinPoint.getSignature();
    System.out.println(e.getSource().getClass() + " lead to " + sig);
  }
}
生成两个不同类的按钮的测试类(在StackTraceeExample.java文件中):


可以使用AspectJ将日志方面编织到代码库中。下面是使用代码库中的方法
actionPerformed(ActionEvent)
执行任何对象时对连接点的建议示例。类似的结构可以用来建议其他听众

下面是建议按钮按下和具有ActionListener的其他组件的方面。它只输出操作源的类名和actionPerformed方法的签名

import java.awt.event.ActionEvent;

import org.aspectj.lang.Signature;

public aspect Logger {
  before(ActionEvent e) : execution(* *.actionPerformed(ActionEvent)) && args(e) {
    Signature sig = thisJoinPoint.getSignature();
    System.out.println(e.getSource().getClass() + " lead to " + sig);
  }
}
生成两个不同类的按钮的测试类(在StackTraceeExample.java文件中):


你看过AOP解决方案了吗?您应该能够拦截代码库的处理方法,并且可以在不更改原始代码的情况下编织方面。。。本文的入门链接?[AspectJ](www.eclipse.org/AspectJ)是Java的标准AOP工具。调用(public*KeyListener.keyPressed(*)的形式,建议输出处理事件的组件。您可能需要处理
cflow
以找到发起者,并在调用侦听器的方法之前跳过调度中间调用。好吧,我想做的似乎更像
调用(public*ActionListener.actionPerformed(*)
,但这似乎是一种有用的方法。然而,我对AspectJ/AOP还不熟悉,尽管我已经把它列在我的清单上尝试了好几年,这似乎是一个非常好的地方。然而,在使用EclipseAJDT时,似乎没有方便的方法将AspectJ添加到现有的Java项目中。我错过什么了吗?我不想修改构建过程,引入Ant脚本等等。所涉及的工作将超过好处,这个功能可能很酷。我想到的可能性是1)创建一个单独的AspectJ项目,该项目依赖于Java项目,以某种方式启动Java应用程序2)创建一个单独的AspectJ项目,导入AspectJ项目并将其用作库。两种方法都有效吗?你们看过AOP解决方案吗?您应该能够拦截代码库的处理方法,并且可以在不更改原始代码的情况下编织方面。。。本文的入门链接?[AspectJ](www.eclipse.org/AspectJ)是Java的标准AOP工具。调用(public*KeyListener.keyPressed(*)的形式,建议输出处理事件的组件。您可能需要处理
cflow
以找到发起者,并在调用侦听器的方法之前跳过调度中间调用。好吧,我想做的似乎更像
调用(public*ActionListener.actionPerformed(*)
,但这似乎是一种有用的方法。然而,我对AspectJ/AOP还不熟悉,尽管我已经把它列在我的清单上尝试了好几年,这似乎是一个非常好的地方。然而,在使用EclipseAJDT时,似乎没有方便的方法将AspectJ添加到现有的Java项目中。我错过什么了吗?我不想修改构建过程,引入Ant脚本等等。所涉及的工作将超过好处,这个功能可能很酷。我想到的可能性是1)创建一个单独的AspectJ项目,该项目依赖于Java项目,以某种方式启动Java应用程序2)创建一个单独的AspectJ项目,导入AspectJ项目并将其用作库。但我不想钩住事件,我想钩住事件的动作。我想知道哪个对象处理事件,而这个事件本身并不知道。制作一个代理事件对象并从自定义事件调度程序传递它怎么样?你的代理可以通知你谁正在用它“做事情”。但我不想钩住事件,我想钩住事件的动作。我想知道哪个对象处理事件,而这个事件本身并不知道。制作一个代理事件对象并从自定义事件调度程序传递它怎么样?你的代理可以通知你谁正在用它“做事”。