首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存EventQueue事件并恢复

保存EventQueue事件并恢复
EN

Stack Overflow用户
提问于 2012-11-09 18:03:55
回答 1查看 234关注 0票数 1

是否可以从事件队列中保存挂起的事件,然后恢复它们?

有以下工作流程:用户单击JTable行,将根据是否打开检查模式确认窗口来检查行是否更改。当用户双击时,将打开行详细信息视图。因此,当模式窗口打开时,它会吞噬所有鼠标事件,因此双击不会到达JTable。

我想在打开模式窗口之前保存事件队列中的所有未决事件,并在模式窗口关闭后恢复它们。

跟随我试过了

代码语言:javascript
复制
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。

我还尝试了推送整个队列:

代码语言:javascript
复制
EventQueue stackQueue = new EventQueue();
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
stackQueue.push(eventQueue);
... //modal window code
eventQueue.push(stackQueue);

在这种情况下,程序似乎是死锁的。

如有任何建议,欢迎光临。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-09 18:25:30

看来我找到问题了。不应该有Stack,只有普通的先进先出集合。

因此,按照模式正确地保存和恢复事件

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13305908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档