我一直在读一些关于AWT和Swing的文章,但我不太清楚Swing是如何工作的。我已经读过,Swing位于AWT的顶部,它是轻量级的(相对于AWT)。我的问题是“如果它使用AWT并继承AWT容器,它怎么可能是轻量级的?”我很困惑。为什么在AWT上使用Swing而不是仅仅使用then....why?AWT会减慢摇摆组件的速度吗?
发布于 2014-07-08 03:09:26
“如果它使用AWT并继承AWT容器,它怎么可能是轻量级的?”
轻量级意味着Swing组件没有它自己的本机对等点,它共享一个(公共)本机对等点。这个本机对等体来自它被添加到的AWT容器(这通常是窗口),并且在容器层次结构中的所有Swing组件之间共享.
AWT提供了“繁重”的提升,连接到本机操作系统,并提供了Swing组件呈现的核心通道。它还提供了许多本机集成,如SystemTray、Desktop和每像素半透明APIs,可供Swing使用。
为什么在AWT上使用Swing而不是仅仅使用then....why?
这是意见问题,但一般来说,AWT被Swing所取代,并提供了一个更加灵活的图形化API来开发。因为它不依赖于平台本机组件,这意味着您可以自由地开发您需要的组件,并且可以在多个平台上运行。
Swing还借用了很多AWT,包括事件队列。
JTree和JTable将是我在AWT上使用Swing的第一个论点;)
AWT会减慢摇摆组件的速度吗?
不怎么有意思。AWT使用DirectX和OpenGL管道已经有一段时间了,因为它是本地API和Java之间的转换层,所以它通常非常擅长它所做的事情。另外,没有AWT,你就没有秋千.
发布于 2014-07-08 03:09:34
要理解Swing如何比AWT轻量级,您需要理解“对等”的概念。对等体是操作系统提供的小部件,例如按钮对象或入口字段对象。
AWT组件通常是一个包含具有对等接口类型的引用的组件类。此引用指向本机对等实现。
说到挥杆,一切都变得清晰而直接。除了顶级容器之外,Swing实现不依赖于单个平台。它拥有所有的控制和资源。Swing需要的是驱动系统的事件输入,以及从顶级AWT容器继承的图形、字体和颜色。普通的Swing组件可以看作是AWT容器上的一个逻辑区域。
Swing组件被称为“轻量级”,因为它们不需要本机OS对象来实现其功能。Swing组件(如JButton、JTextArea等)是轻量级的,因为它们没有操作系统对等体。很少有Swing组件可能需要OS对等程序,并且会产生类似于AWT的性能。
https://stackoverflow.com/questions/24622968
复制相似问题