java - 保存EventQueue事件并恢复

标签 java swing mouseevent eventqueue

是否可以从事件队列中保存待处理事件然后恢复它们?

有以下工作流程:用户单击 JTable 行,然后检查行是否已更改,具体取决于打开的检查模式确认窗口。当用户双击行详细信息 View 时打开。因此,当模式窗口打开时,它会吞下所有鼠标事件,因此双击不会到达 JTable。

我想在打开模态窗口之前以某种方式保存事件队列中的所有待处理事件,并在模态窗口关闭后恢复它们。

下面我尝试过

EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
Stack<AWTEvent> events = new Stack<AWTEvent>();
PaintEvent pe = new PaintEvent(DetailPanel.this, PaintEvent.PAINT, new Rectangle(10, 10));
eventQueue.postEvent(pe);
while (eventQueue.peekEvent() != null) {
    AWTEvent event = eventQueue.getNextEvent();
    events.push(event);
}
..... // modal window code
while(!events.isEmpty()) {
    eventQueue.postEvent(events.pop());
}

这没有帮助,双击无法到达 JTable。

我还尝试推送整个队列:

EventQueue stackQueue = new EventQueue();
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
stackQueue.push(eventQueue);
... //modal window code
eventQueue.push(stackQueue);

在这种情况下,程序似乎陷入了僵局。

如有任何建议,我们将不胜感激。

最佳答案

我似乎发现了问题。不应该有Stack,只是普通的FIFO集合。

因此,以下模式正确保存和恢复事件

EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
List<AWTEvent> events = new ArrayList<AWTEvent>();
eventQueue.postEvent(new PaintEvent(DetailPanel.this, PaintEvent.PAINT, new Rectangle(10, 10));
while (eventQueue.peekEvent() != null) {
    events.add(eventQueue.getNextEvent());
}
..... // modal window code
For (AWTEvent event : events) {
    eventQueue.postEvent(event);
}

关于java - 保存EventQueue事件并恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13305908/

相关文章:

java - 整数百分比不正确

java - 如何使用给定的私钥通过 ca 证书签署最终实体证书

java - 将 JTable 放入 JTree 中

Java Swing : Ctrl+F1 does not work globally, 但互为组合键

java - 在 Linux 上存储应用程序数据(非用户特定)的位置

用于 Zipfile 的 Java ByteBuffer

java - Swing 线程安全编程

java - 在 javafx 中一起处理鼠标移动和单击

javascript - 鼠标位置的背景颜色变化在鼠标移动之前不加载

javascript - Jquery 鼠标单击事件不适用于某些功能