Java起源于AWT(Abstract Windowing Toolkit),后来引入了Swing。
在AWT中,平台事件处理循环被挂钩,并将事件打包到自己的Java类中,而一个单一的(非并行)事件处理队列/线程会逐个处理它们。Swing继承了这一点。
在AWT中,每个GUI组件(如单选按钮或菜单项)都有一个本地代码“peer”控件,即平台提供的组件。有一组Java类及其C对应项是并行的。特别有趣的是Java Graphics类,它允许自定义绘制线条、矩形等。在Windows下,它与CDC(设备上下文)配对。
在Swing中,大多数平台组件都是模拟的,即重新创建:绘图、鼠标处理等等。因此,本地部分更简单,例如使用自定义绘图的CWnd(窗口组件)。
Swing可以实现更一致和功能更丰富的功能。您可以想象,在AWT单选按钮上设置背景颜色可能是不可能的,或者在标签或工具提示上使用HTML。同时,Swing可以进行皮肤、主题和外观的设置。 系统外观被视为平台组件的近似拷贝。特别是Swing组件更加轻量级,因为不是每个组件都有一个本机对等控件在C中处理。
现在,SWT是IBM在重载AWT时实现的后期举措,在Eclipse中实现。它没有Swing那么可定制,但旨在接近平台。
您应该忘记使用AWT组件,如果不是为Eclipse RCP编程,则也不要使用SWT。
因此:全局平台事件(如鼠标单击、重新绘制请求)被转换为Java事件。有一个JFrame、JPanels、JScrollPanes和JComponents的容器层次结构。事件被分派到处理组件上,在其中例如调用paintComponent:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.draw...
}
随着JavaFX的出现,带来了一个新的播放器,我认为它还不够成熟,但在非生产代码中可用。它可以实现效果/动画、旋转、变形和光照。因此,基于像平台渲染的2D-4D渲染也可以实现。它还是基于属性的,所以复选框不必绑定到布尔值,而是绑定到观察并通知更改的布尔属性。我仍然需要一些实践经验,以设计出最佳架构。