我正在开发基于 Swing 的应用程序。
我的问题是我使用JWebBrowser并将一个放在可滚动面板中。当我向下滚动面板时,Web 浏览器与应用程序的面板/框架重叠。
我该怎么做才能使浏览器不与面板重叠?
我正在开发基于 Swing 的应用程序。
我的问题是我使用JWebBrowser并将一个放在可滚动面板中。当我向下滚动面板时,Web 浏览器与应用程序的面板/框架重叠。
我该怎么做才能使浏览器不与面板重叠?
我在这里没有看到答案,所以作为一个在这条崎岖不平的道路上走过的人,我可以对这些问题表示同情,并希望提供一些指导。
首先,它JWebBrowser
是一个 AWT 重量级组件,如果没有一些干预,它在 Swing 中不能很好地发挥作用(因为它使用了轻量级组件)。
像这样实例化JWebBrowser
友好的 Swing 集成的第一步:
new JWebBrowser(NSComponentOptions.destroyOnFinalization(),
NSComponentOptions.constrainVisibility(),
NSComponentOptions.proxyComponentHierarchy())
单独的实例化应该可以防止浏览器与 Swing 轻量级组件重叠,但是,除非您执行一些额外的步骤,否则它不会像您对透明度或图层所期望的那样工作。
因此,在构建过程中,调用这些:
webBrowser.setDoubleBuffered(true);
webBrowser.getNativeComponent().createBackBuffer();
然后,在 Web 浏览器与任何类型的透明度或图层一起使用之前,调用这些:
rects[0] = webBrowser.getBounds();
webBrowser.getNativeComponent().updateBackBuffer(rects);
这些调用将在使用组件之前重新绘制后备缓冲区,因此在使用时,它将与最新的后备缓冲区一起显示,并且在那时看起来很像常规的 Swing 组件。
所有这些都有一些细微差别,但这是基础知识,应该足以让任何人开始使用它。