5

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

我编写的裸/原始 Swing 代码如何变成出色的图形应用程序?

例如:

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

  • 谁让颜色出现?

  • 幕后的过程是怎样的?

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

提前致谢!

4

3 回答 3

5

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

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

所以在某些时候,Sw​​ing 将不得不在屏幕上创建一个窗口并在其上绘图。实际创建窗口的魔法由 AWT 处理。请注意,JFrameextend from java.awt.Framewhich 意味着尽管 JFrame 可能主要由 Java 呈现,但它由重量级的本机 OS 窗口支持。

于 2012-06-20T20:33:10.443 回答
1

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

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

Metal 和 Nimus LaF 是 100% java2d 绘制的,所以在它们里面你会发现像 drawRectangle 和 drawLine 这样的东西来绘制组件。原生外观和感觉,如 windows、gtk,访问当前操作系统主题以绘制类似于原生小部件的东西。这就是为什么它们并不总是看起来像原生应用程序。

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

于 2012-06-20T20:45:31.963 回答
0

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

于 2012-06-20T20:33:58.057 回答