今天阅读AWT的源码,EVENT和EVENTLlistner都挺好,监听者比较完善。阅读完Componet有些糊涂,不知道AWT是如何处理事件源的,譬如鼠标的CLICK消息是由谁发出的,考虑到他可能涉及系统消息,会存在通过JNI访问C代码的问题,又特别关注了TextEvent的Textchanged,也没有找到相应的事件源判断和通知代码,请高手指导啊,甚是感谢!
解决方案 »
- BigInteger
- java中常用的数据结构封装在哪里了?
- 310.035---6.关于outofmemory
- 求助!jsf 国际化问题!
- IllegalMonitorStateException
- :[求助]jdom读取xml文档的问题.繁体显示不了.请问如何解决/?
- 初学java ,做练习时发现练习里面涉及具体算法的问题几乎没有,这是为什么?
- 请问如何在JEditorPane中光标当前位置插入一段HTML代码,或图片
- application 显示不完整???
- 请问各位现在用JAVA为开发工具的多,还是用C++的多?
- 为什么我的程序运行的同时即可关闭
- 用java程序怎么判断rar文档加密状态?
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
public class CallTest implements ActionListener{
public CallTest() {
JFrame f = new JFrame();
JButton btn = new JButton("Click me!");
btn.addActionListener( this );
f.add( btn, BorderLayout.NORTH );
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize(400,300);
f.setLocationRelativeTo( null );
f.setVisible( true );
}
public void actionPerformed( ActionEvent e ) {
StackTraceElement[] stackTraces = Thread.currentThread().getStackTrace();
for(StackTraceElement ste : stackTraces) {
System.out.println(ste);
}
} public static void main(String[] args) {
new CallTest();
}}在我机子上的运行结果如下:java.lang.Thread.getStackTrace(Unknown Source)
systemTest.CallTest.actionPerformed(CallTest.java:25)
javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
javax.swing.DefaultButtonModel.setPressed(Unknown Source)
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
java.awt.Component.processMouseEvent(Unknown Source)
javax.swing.JComponent.processMouseEvent(Unknown Source)
java.awt.Component.processEvent(Unknown Source)
java.awt.Container.processEvent(Unknown Source)
java.awt.Component.dispatchEventImpl(Unknown Source)
java.awt.Container.dispatchEventImpl(Unknown Source)
java.awt.Component.dispatchEvent(Unknown Source)
java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
java.awt.Container.dispatchEventImpl(Unknown Source)
java.awt.Window.dispatchEventImpl(Unknown Source)
java.awt.Component.dispatchEvent(Unknown Source)
java.awt.EventQueue.dispatchEvent(Unknown Source)
java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.run(Unknown Source)
然后,EventQueue指派事件到窗体上,在接着JFrame继续向下指派事件
直到到了JButton,然后JButton的UI接收到了事件,对ButtonModel进行了
一些操作,最后由ButtonModel的fireActionPerformed来通知注册到该按钮上的ActionListener。