What is sun.awt.windows.WToolkit?



我有以下一段代码

import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.*;
import javax.swing.*;
class QueueTest {
static int i=0;
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.setLayout(new FlowLayout());
f.setVisible(true);
Button b=new Button("button");
//b.setEnabled(false);
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);
}
protected void dispatchEvent(AWTEvent event)
{
System.out.println("The source of event ("+(i++)+") is 
"+event.getSource());
super.dispatchEvent(event);
}
}
}

在输出中,我有时可以看到

The source of event is (78) sun.awt.windows.WToolkit@77ef83

当我认为我只有两个来源时,java.awt.Buttonjava.awt.Frame。此外,当我按下鼠标时,我可以看到正在生成两个事件,一个是sun.awt.windows.WToolkit是源,另一个是Button(当我单击按钮时)。

我的问题是

  1. 什么是sun.awt.windows.WToolkit
  2. 为什么我可以在一次鼠标按压中看到两个事件

名称不言自明:AWT代表抽象窗口工具包,这意味着Toolkitabstract,需要实际实现。sun.awt.windows.WToolkitMicrosoftWindows平台的一个实现,因此W在其名称中。在其他操作系统上,您会看到不同的实现,例如Linux上的sun.awt.X11.XToolkit。如果您只执行System.out.println(Toolkit.getDefaultToolkit());,您将看到Toolkit的字符串表示与您不时看到的事件源的字符串表示相匹配。

我建议您对整个事件进行print,而不仅仅是源。然后你会看到这些活动是为了什么。您将看到工具箱生成的事件类型。你会看到,鼠标点击最多可以生成三个事件:一个用于按下,一个用于释放,如果按下和释放发生在同一位置,则被视为点击

您使用*字符实现了所有库。因此,输出指定了事件发生的来源。

相关内容

  • 没有找到相关文章

最新更新