Swing 代码如何变成真正的图形应用程序



这个问题可能看起来不是很技术性,但出于好奇,我想知道:

我编写的裸/原始 Swing 代码如何变成一个精彩的图形应用程序?

例如:

  • 就像我们让 JFrame 可见,或者当我们在上面放置一个 JButton 时一样。谁让它发生?操作系统、Java 或 JVM。

  • 谁让颜色出现?

  • 幕后的过程是什么?

我问这个问题可能是因为这是我一生中第一次制作 RealWorld 图形应用程序,这些问题突然出现在我的脑海中!

提前感谢!

在 Swing 中,所有 GUI 组件都完全用 Java 编写,并使用 Java 渲染。 例如,JButtons将由Java绘制,而不是由任何内部操作系统的东西绘制。 因此,Swing 组件被称为"轻量级组件",因为它们由 Java 而不是操作系统(或任何本机小部件工具包)管理和渲染。

请注意,Java也有一个名为AWT的工具包。 Swing基于AWT的嵌套和继承方法,除了它使用操作系统创建本机小部件。

因此,在某些时候,Swing 将不得不在屏幕上创建一个窗口并在其上绘制。 实际创建窗口的魔力由AWT处理。 请注意,JFramejava.awt.Frame扩展而来,这意味着尽管JFrame可能主要由Java呈现,但它由重量级本机操作系统窗口支持。

简而言之,有一个AWT工具包,它是执行所有窗口管理和绘图的层。它在 JVM 中调用本机平台特定的代码。它还负责java2d绘图。它可以使用加速的 directx 或 opengl 管道。

秋千是在它之上开发的。Swing实际上用纯java代码绘制每个按钮和每个对象。图形以当前外观和感觉进行处理,以决定如何绘制组件。因此,您可以覆盖他们的绘制方法,并添加一些额外的内容而不会出现任何问题。

Metal 和 Nimus LaF 是 100% java2d 绘制的,因此在它们内部您会发现 drawRectangle 和 drawLine 之类的东西来绘制组件。本机外观和感觉,如Windows,gtk,访问当前操作系统主题以绘制类似于本机小部件的内容。这就是为什么它们并不总是看起来像本机应用程序的原因。

还有其他用于Java的gui工具包,如SWT,例如在Eclipse中使用。它正在做的是从AWT获取窗口,然后在其上放置100%本机小部件。它与操作系统的集成要好得多,看起来更好,工作速度更快,使用更少的内存。但是有了它,您必须使用特定于操作系统的本机库分发应用程序,并且与 Swing 相比,它的可定制性较低。

我不知道所有的细节,但实际的图形是通过 JVM 本身通过 swing/awt 包显示/渲染的。

相关内容

  • 没有找到相关文章

最新更新