Java 从awt (Abstract Windowing Toolkit) 开始,后来引入了swing。
在AWT中,平台事件处理循环被挂钩,事件被打包在自己的 java 类中,一个(非并行)事件处理队列/线程一个接一个地处理它们。Swing 继承了这一点。
在AWT中,每个 GUI 组件,如单选按钮或菜单项,都有一个本机代码“对等”控件,即平台提供的组件。有一组并行的 java 类及其对应的 C 类。特别有趣的是 java Graphics 类,它允许自定义绘制线条、矩形等。它在 Windows 下与 CDC(设备上下文)对等 - 大概。
在Swing中,大多数平台组件都是模拟的,即重新创建自己:绘图、鼠标处理等。所以本机部分更简单,比如可能是带有自定义绘图的 CWnd(窗口组件)。
Swing 可以实现更一致且功能更丰富的功能。您可以想象在 AWT 单选按钮上设置背景颜色可能是不可能的,或者在标签或工具提示上使用 HTML 是不可能的。Swing 还可以做蒙皮、主题、LookAndFeels。系统的外观和感觉是对平台组件的密切模仿。特别是 Swing 组件的重量更轻,因为并非每个组件都有一个本地对等控件以在 C 中处理。
现在SWT是后来 IBM 在 eclipse 中实现的用于重新加载 AWT 的倡议。不像 Swing 那样可定制,但打算靠近平台。
您应该忘记使用 AWT 组件,如果不为 Eclipse RCP 编程,也应该忘记使用 SWT。
因此:鼠标点击、重绘请求等全局平台事件被转换为 Java 事件。有 JFrame、JPanels、JScrollPanes、JComponents 的容器层次结构。一个事件被分派给处理组件,例如调用paintComponent:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g; // A later introduced class that can do more.
g2.draw...
}
JavaFX带来了一个新的播放器,恕我直言,它尚未完全成熟,但可用于非生产代码。它启用效果/动画、旋转、变换、灯光。因此,基于类似平台渲染的 2D - 4D 渲染。它也是基于属性的,因此复选框不一定绑定到布尔值,而是布尔属性观察和通知更改。我还需要一些实践经验,才能用它来构思一个最佳架构。