3

JVM如何使其成为窗口,我知道它有它的jar文件和可执行文件等......我想知道的是用java制作的窗口究竟是如何制作的,围绕桌面应用程序的框架。

它是安装它的机器上的图形库标准吗?

4

3 回答 3

7

Java 中有两种类型的 UI 组件:重量级和轻量级。

重量级组件是操作系统中存在的东西的包装器。Windows 作为操作系统具有创建窗口、对话框等的方法。

使用 2D 绘图 API 等完全在应用程序内创建轻量级组件。操作系统对此一无所知。

两个“官方”Java GUI API 是 Swing 和 AWT。AWT 通常由小程序(无论如何是早期的)使用。它由重量级组件组成。Swing 构建在 AWT 之上,但它是一个更广泛的 API,用于设计通常的桌面应用程序。大多数 Swing 组件都是轻量级的。

因此,Java 桌面应用程序可能包含一个或多个重量级组件,可能包含一些轻量级组件。或者如果 2D 绘图 API 足以“伪造”没有重量级组件的 Windows,它可能都是轻量级组件。

您在 Java 应用程序周围看到的框架可能是使用 Java2D 之类的库绘制的(直接或通过使用该库或类似 API 的组件),或者它可能是由 Windows 使用应用程序的配置创建的,可能受操作系统的影响主题和显示设置。

如今,大多数 Java 应用程序都是轻量级的。

于 2009-08-22T03:01:02.383 回答
0

默认情况下,框架是否java.awt.Framejavax.swing.JFrame(或等价物)将由底层窗口系统绘制。最近(2002),1.4引入了Frame.setUndecorated相关方法。这允许将框架绘制为未装饰的窗口(就像Window那样),并且某些 PL&F,例如 Metal,可以绘制一个正常工作的框架,而不是委托给窗口系统。此功能显然是为了让整个窗口具有相同的外观和感觉而实现的。据我所知,旨在复制本机窗口系统的 Sun 外观实现没有实现此功能。

于 2009-08-22T03:12:01.243 回答
0

只是为了完整:还有 SWT,它在 Windowing 系统的本机实现之上薄薄的 Java 层。有点像 AWT 重做。它由 Eclipse 项目使用。应该提供更接近原生 L&F 的匹配,更快的渲染 - 但 YMMV。

SWT 的缺点是您必须学习额外的 API,并且这些库必须在所有目标平台上都可用。例如,直到最近,OS-X 版本还相当不完整和过时(Carbon,不是基于 Cocoa)。

于 2010-07-18T04:26:56.580 回答