Java Swing:如何创建事件并将其分派到组件?

Java Swing:如何创建事件并将其分派到组件?,java,swing,events,Java,Swing,Events,我需要向Swing中的组件发送一些事件,因此它的处理方式与任何用户生成的标准Swing事件一样 基本上,类似于宏记录器,然后是JEditorPane的执行器。但我需要更多地控制生成的事件 假设我有一个编辑器,我想: 捕获发送给它的所有事件,在那个时,我可以将它们存储在列表、磁盘或其他任何地方 以后能够参加这些比赛 理想的情况是允许用户编辑包含以下内容的命令: 键入键A、选择行、删除所选内容、光标向上、行开始 如果您正在寻找标准GUI事件,那么您需要 如果您希望定义自己的事件,那么必须对需要接收这

我需要向Swing中的组件发送一些事件,因此它的处理方式与任何用户生成的标准Swing事件一样

基本上,类似于宏记录器,然后是JEditorPane的执行器。但我需要更多地控制生成的事件

假设我有一个编辑器,我想:

  • 捕获发送给它的所有事件,在那个时,我可以将它们存储在列表、磁盘或其他任何地方
  • 以后能够参加这些比赛
  • 理想的情况是允许用户编辑包含以下内容的命令:
    键入键A、选择行、删除所选内容、光标向上、行开始

  • 如果您正在寻找标准GUI事件,那么您需要

    如果您希望定义自己的事件,那么必须对需要接收这些事件的GUI类进行子类化(或者更好,为它们创建一个外部控制器),定义一个事件类,并分派事件。您可以使用分派、创建自己的处理程序类(我发现这在某些情况下更有用),或者将事件(取决于它们继承的方式)注入系统事件队列(找不到用于执行此操作的类…我以为它是Toolkit)


    然而,我不会做这些。您所描述的(宏记录器)应该使用一个控制器来实现,该控制器生成/提供一系列特定于应用程序的操作消息(查看命令模式)。

    我认为您必须构造一个事件实例,然后调用

    java.awt.EventQueue.dispatchEvent(event)
    

    将事件源设置为所需的组件。

    显然要做的事情是获取
    事件队列
    并向其发布事件。这只会将事件添加到队列中,队列将在EDT上被调度

    java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event);
    
    昨天有人声称Opera和Safari各司其职,没有对不受信任的代码授予必要的权限


    一种直接的方法是调用
    组件。dispatchEvent

    EventQueue。dispatchEvent是一种受保护的实例方法。您必须获取当前事件队列并推送子类才能使用该方法。改为使用postEvent()如何?我喜欢您的命令提示。但找不到任何关于如何实际做的信息。如果不确切知道你想做什么,就很难给出具体的建议。但是,考虑JEdError窗格使用JavaX.SWIG.T..Noice来管理它的内容,并且可以附加Debug监听器来接收对该文档的所有更改。如果将侦听器的事件保存在列表中,则可以随时重播该列表并应用更改或撤消更改。至少现在,我希望使用一种简单但可编程的方式在编辑器上录制和重播宏。附加到文档的问题是插入符号移动不会发送到文档。因此,我需要连接到GUI组件接收/处理的事件。动作看起来非常适合,但是我需要一种连接方式来查看发送(录制)的动作,然后将录制/处理的动作注入回组件。非常感谢。我一直在跟踪使用“Component.dispatchEvent”的代码,如果我没有弄错的话,这将实际调用当前线程上的侦听器?“postEvent”方法不是更好吗,因为它将调用EventQueue线程上的处理程序?您应该在EDT上使用组件完成几乎所有的事情。(AWT声称是全线程安全的,但不是。)当然,正如我提到的,还有权限的问题。