保存的EventQueue事件和恢复

问题描述:

是否有可能挽救事件队列中等待事件,然后恢复它们?保存的EventQueue事件和恢复

有以下工作流程:在JTable中列的用户点击,有一个检查,如果行被改变,这取决于是打开的检查模式的确认窗口。当用户双击打开行详细信息视图时。所以当打开模式窗口时,它会吞噬所有的鼠标事件,因此双击不会到达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); 

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

任何建议表示赞赏。

+0

为什么不检查鼠标点击次数[#的MouseEvent getClickCount(http://docs.oracle.com/javase/7/docs/api/的java/AWT /事件/ MouseEvent.html#getClickCount()) – MadProgrammer

+0

@MadProgrammer,鼠标点击和行变化在不同的处理程序进行处理。 –

+0

@misha涅斯捷连科是不是更好用Java7,有可能创造二次回路:-) – mKorbel

我似乎发现了问题。不应该有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); 
}