【发布时间】:2014-02-24 02:55:06
【问题描述】:
我有以下代码
import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.*;
import javax.swing.*;
class QueueTest {
public static void main(String[] args) throws InterruptedException,
InvocationTargetException {
EventQueue eventQueue =
Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEventQueue());
Frame f=new Frame();
f.setSize(400,400);
//f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocation(150,150);
f.setVisible(true);
Button b=new Button("button");
f.add(b);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae)
{
System.out.println("button is clicked");
}
});
}
private static class MyEventQueue extends EventQueue {
public void postEvent(AWTEvent theEvent) {
// System.out.println("Event Posted");
System.out.println("The source of event is "+theEvent.getSource());
super.postEvent(theEvent);
}
}
}
我写了一个自定义的EventQueue。当我将Frame 替换为JFrame 并将Button 替换为JButton 时,这正在发挥作用。但为什么这不适用于 AWT 组件?
当我调整框架大小时,单击按钮时控件未进入postEvent() 方法。但在摇摆中,它被输入了。为什么会这样?
事件不是放在 AWT 中的EventQueue 中吗?还有谁将事件发布到EventQueue? Windows 内核?
请回复我。
【问题讨论】:
标签: java swing events event-handling awt