这个问题可能看起来不太技术性,但出于好奇,我想知道:
我写的裸/原始Swing代码如何变成一个精彩的图形应用程序?
例如:
就像我们让JFrame可见,或者我们在其上放置JButton一样。谁让它发生?操作系统或Java或JVM。
谁让颜色出现?
幕后的过程是什么?
我问这可能是因为这是我生命中第一次制作了一个RealWorld图形应用程序而且这些问题在我脑海中浮现出来了!
提前致谢!
答案 0 :(得分:5)
在Swing中,所有GUI组件都完全用Java编写,并使用Java进行渲染。例如,JButtons将由Java绘制,而不是由任何内部操作系统绘制。因此,Swing组件被称为“轻量级组件”,因为它们由Java而不是OS(或任何本机小部件工具包)管理和呈现。
请注意,Java还有一个名为AWT的工具包。 Swing基于来自AWT的嵌套和继承方法,除了它使用操作系统创建本机小部件。
所以在某些时候,Swing必须在屏幕上创建一个窗口并在其上绘制。实际创建窗口的魔力由AWT处理。请注意JFrame
从java.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本身显示/呈现的。