【发布时间】:2016-02-23 03:16:22
【问题描述】:
在我的 JavaApplication 中,我的 JFrame 中有一个 JLayeredPane。 JLayeredPane 包含一个 Canvas 作为下部面板,我在其中显示带有视频播放器框架的视频。在上层 JLayeredPane 包含一个 JFXPanel,我在其中显示一个 JavaFX.WebView。 Webview 是完全透明的。
问题是 Canvas 仅在未显示 WebView 的地方可见,并且我从放置 WebView 的 JFrame 中看到背景。如果我禁用 JFXPanel,我可以通过视频看到整个 Canvas。
我还尝试添加 JPanel 作为较低级别。结果就像我想成为画布。我可以看到完整的 JPanel,在它之上,它显示了 WebView。
那么,我可以做些什么来使 Canvas 足够强大以显示整个框架。我认为 canvas.setOpaque 可以解决这个问题,但是这个方法不可用。
更新:
//BROWSER
this.jfxPanel = new JFXPanel();
this.jfxPanel.setOpaque(false);
this.jfxPanel.setBounds(0,0,MainFrame.VIDEO_SIZE_X,MainFrame.VIDEO_SIZE_Y);
PlatformImpl.startup(new Runnable() {
public void run() {
webView = new WebView();
webView.setPrefSize(MainFrame.VIDEO_SIZE_X-100,MainFrame.VIDEO_SIZE_Y-100);
webEngine = webView.getEngine();
webView.setStyle("-fx-background-color: rgba(0,0,0,0)");
Scene scene = new Scene(webView,MainFrame.VIDEO_SIZE_X-100,MainFrame.VIDEO_SIZE_Y-100);
scene.setFill(javafx.scene.paint.Color.TRANSPARENT);
webEngine.documentProperty().addListener(new DocListener());
webEngine.loadContent("<body style='background : rgba(0,0,0,0);font-size: 70px;text-align:center;'>Test Transparent</body>");
jfxPanel.setScene(scene);
}
});
//add browser in upper level to JLayeredPane
this.videoPanel.add(jfxPanel, new Integer(100));
//CANVAS
this.videoCanvas = new Canvas();
this.videoCanvas.setVisible(true);
this.videoCanvas.setBounds(0,0, MainFrame.VIDEO_SIZE_X,MainFrame.VIDEO_SIZE_Y);
//add canvas at lower level to JLayeredPane
this.videoPanel.add(this.videoCanvas, new Integer(0));
videoPanel 是 JLayeredPane。它是 setVisible(true) 并且具有与画布和浏览器相同的大小。
提前致谢!
【问题讨论】:
-
请显示一些代码..
-
您正在混合 AWT、Swing 和 JavaFX 组件。这种混合物不会带来任何好处。
-
我已经添加了一些代码! @GilbertLeBlanc 我必须为播放器使用 Awt。用于浏览器的 JavaFX 和其他元素用于 GUI..
标签: java swing canvas javafx awt