Swing:如何创建事件并将它们分发给组件?

我需要将一些事件发送到Swing中的组件,因此它就像任何用户生成的标准Swing事件一样处理。

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

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

  1. 捕获发送给它的所有事件,此时,我可以将它们存储在列表,磁盘或任何内容中。
  2. 以后能够播放这些活动
  3. 理想情况是允许用户编辑包含以下内容的命令:
    “键入键A,选择行,删除选择,向上光标,行开始…”

显而易见的事情是获取EventQueue并将事件发布到它。 这只会将事件添加到队列中,该队列将在EDT上轮流调度。

 java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event); 

昨天有人声称Opera和Safari做了他们自己的事情,并没有给不受信任的代码提供所需的权限。

直接的方法是调用Component.dispatchEvent

如果您正在寻找标准的GUI事件,那么您需要java.awt.Robot

如果您要定义自己的事件,则必须子类化需要接收这些事件的GUI类(或者更好,为它们创建外部控制器),定义事件类并分派事件。 您可以使用java.beans.EventHandler来调度,创建自己的处理程序类(我发现它在某些情况下更有用),或者将您的事件(取决于它们如何inheritance)注入系统事件队列(找不到这样做……我认为这是Toolkit)。

但是,我不会做这些。 您所描述的内容(宏录制器)应该使用控制器来实现,该控制器生成/提供一系列特定于应用程序的操作消息(请参阅命令模式)。

我相信你必须构造一个事件的实例然后调用

 java.awt.EventQueue.dispatchEvent(event) 

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