我一直在寻找有关AWT包基本原理的详细信息。具体来说,它如何与主机操作系统进行本机交互以创建Windows及其内容。
有人能指出我这种文件或提供任何其他信息吗?
答案 0 :(得分:5)
OpenJDK source是要走的路。你只需要点击正确的文件夹。你可以看到这样的内部代码:
checkbox = new AwtCheckbox();
...
checkbox->CreateHWnd(env, labelStr, style, exStyle,
x, y, width, height,
awtParent->GetHWnd(),
reinterpret_cast<HMENU>(static_cast<INT_PTR>(
awtParent->CreateControlID())),
::GetSysColor(COLOR_WINDOWTEXT),
::GetSysColor(COLOR_BTNFACE),
peer);
CreateHWnd
函数可以在awt_Component.cpp文件中找到,它调用CreateWindowEx
函数。
答案 1 :(得分:4)
<强>基本强>
C ++中的大多数GUI类库都是特定于平台的,不仅仅是因为硬件功能不同,
但各种Windowing操作系统的“外观和感觉”之间存在细微差别。
Java Abstract Window Toolkit提供了一个跨平台的库
旨在观察各种操作系统平台的外观惯例。
Toolkit ------------------------------------------------ AWT
--------|---------
Button List JVM
------|-------------|--------------------------------------------------
Button Peer List Peer Native GUI (Windows, Mac, X)
的更多信息
AWT 提供两个级别的API:
Java与本机系统之间的通用接口,用于窗口,事件和布局管理器。该API是Java GUI编程的核心,也被Swing和Java 2D使用。它包含:
一组基本的GUI小部件,例如按钮,文本框和菜单。
它还提供了AWT Native Interface,它使得编译为本机代码的库能够直接绘制到AWT Canvas对象绘图表面。
AWT还为应用程序提供了一些更高级别的功能,例如:
访问支持系统上的系统托盘;和
能够从Java应用程序启动某些桌面应用程序,如Web浏览器和电子邮件客户端
要获取Native OpenJDK AWT类的源代码,请使用以下链接
jdk6/jdk6-gate/jdk/src/windows/native/sun/
jdk6/jdk6-gate/jdk/src/windows/native/sun/windows/(Windows-AWT-Native类)。
<强>的OpenJDK 强>(GPL)
<强>参考:强>
Open jdk6/jdk6-gate/jdk/src/share/classes/java/awt/(示例AWT包源代码)
主OpenJDK project,基于JDK 7
您可以找到OpenJDK功能here
Caciocavallo,Project提供基于OpenJDK的Java API,以简化新系统上的AWT实现。该项目使用Java2D成功实现了AWT小部件。
[OpenJDK Mailing list。]
阅读AWT Documentation以获得有关其实施的清晰知识。
让awt-dev Mailing Lists参与其中。
答案 2 :(得分:2)
这是一个实现细节。事实上的标准是Oracle如何实现它。如果你真的想知道,那么看看源代码。它可以在http://openjdk.java.net/找到。链接位于搜索框下方的左列中。相关的类应该在sun.awt
包中。
答案 3 :(得分:1)
那么有pdf(如下所述)....但对我来说这很难理解。但它可能对你有帮助。
How Java Programs Interact with Virtual Machines at the Microarchitectural Level.
答案 4 :(得分:-2)
Awt使用native
方法完成此操作。这些是java方法,它们在单独的文件中引用本机语言中的方法。所以基本上如果你使用的是Windows而你想打开一个窗口,java将使用C ++来打开窗口。