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

时间:2009-04-30 18:51:11

标签: java swing events

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

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

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

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

3 个答案:

答案 0 :(得分:6)

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

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

昨天有人声称Opera和Safari会做自己的事情,并且不会对不受信任的代码给予必要的许可。

直接的方法是拨打Component.dispatchEvent

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

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

java.awt.EventQueue.dispatchEvent(event)

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