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

时间:2012-06-20 20:21:03

标签: java swing graphics

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

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

例如:

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

  • 谁让颜色出现?

  • 幕后的过程是什么?

我问这可能是因为这是我生命中第一次制作了一个RealWorld图形应用程序而且这些问题在我脑海中浮现出来了!

提前致谢!

3 个答案:

答案 0 :(得分:5)

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

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

所以在某些时候,Sw​​ing必须在屏幕上创建一个窗口并在其上绘制。实际创建窗口的魔力由AWT处理。请注意JFramejava.awt.Frame扩展,这意味着虽然JFrame可能主要由Java呈现,但它由重量级的本机操作系统窗口支持。

答案 1 :(得分:1)

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

Swing是在它上面开发的。 Swing实际上使用普通的java代码绘制每个按钮和每个对象。绘图处理为当前外观并决定如何绘制组件。所以你可以覆盖他们的绘画方法,并添加一些额外的东西,没有任何问题。

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

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

答案 2 :(得分:0)

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