我需要向Swing中的组件发送一些事件,因此它就像任何用户生成的标准Swing事件一样处理。
基本上,像宏录制器,然后是JEditorPane的执行器。但我需要更多地控制生成的事件。
所以,假设我有一个编辑,我想:
答案 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)
将事件的来源设置为所需的组件。