JVM如何使其成为窗口,我知道它有它的jar文件和可执行文件等......我想知道的是用java制作的窗口究竟是如何制作的,围绕桌面应用程序的框架。
它是安装它的机器上的图形库标准吗?
JVM如何使其成为窗口,我知道它有它的jar文件和可执行文件等......我想知道的是用java制作的窗口究竟是如何制作的,围绕桌面应用程序的框架。
它是安装它的机器上的图形库标准吗?
Java 中有两种类型的 UI 组件:重量级和轻量级。
重量级组件是操作系统中存在的东西的包装器。Windows 作为操作系统具有创建窗口、对话框等的方法。
使用 2D 绘图 API 等完全在应用程序内创建轻量级组件。操作系统对此一无所知。
两个“官方”Java GUI API 是 Swing 和 AWT。AWT 通常由小程序(无论如何是早期的)使用。它由重量级组件组成。Swing 构建在 AWT 之上,但它是一个更广泛的 API,用于设计通常的桌面应用程序。大多数 Swing 组件都是轻量级的。
因此,Java 桌面应用程序可能包含一个或多个重量级组件,可能包含一些轻量级组件。或者如果 2D 绘图 API 足以“伪造”没有重量级组件的 Windows,它可能都是轻量级组件。
您在 Java 应用程序周围看到的框架可能是使用 Java2D 之类的库绘制的(直接或通过使用该库或类似 API 的组件),或者它可能是由 Windows 使用应用程序的配置创建的,可能受操作系统的影响主题和显示设置。
如今,大多数 Java 应用程序都是轻量级的。
默认情况下,框架是否java.awt.Frame
或javax.swing.JFrame
(或等价物)将由底层窗口系统绘制。最近(2002),1.4引入了Frame.setUndecorated
相关方法。这允许将框架绘制为未装饰的窗口(就像Window
那样),并且某些 PL&F,例如 Metal,可以绘制一个正常工作的框架,而不是委托给窗口系统。此功能显然是为了让整个窗口具有相同的外观和感觉而实现的。据我所知,旨在复制本机窗口系统的 Sun 外观实现没有实现此功能。
只是为了完整:还有 SWT,它在 Windowing 系统的本机实现之上薄薄的 Java 层。有点像 AWT 重做。它由 Eclipse 项目使用。应该提供更接近原生 L&F 的匹配,更快的渲染 - 但 YMMV。
SWT 的缺点是您必须学习额外的 API,并且这些库必须在所有目标平台上都可用。例如,直到最近,OS-X 版本还相当不完整和过时(Carbon,不是基于 Cocoa)。