Java 画布不可见

Posted

技术标签:

【中文标题】Java 画布不可见【英文标题】:Java Canvas is not visible 【发布时间】: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.. 【参考方案1】:

正如Gilbert Le Blanc 已经提到的,混合AWT、Swing 和JavaFX 组件可能会使您的项目不必要地复杂化(请参阅mixing awt and swing in GUI programming using Java 和JavaFX Tip 9: Do Not Mix Swing / JavaFX)。如果你能找到一个基于 Swing 的网络查看器和视频播放器,它会更容易让它工作。

例如,您可以查看 The DJ Project 的 Web 查看器和视频播放器(另请参阅 Best Java/Swing browser component?)。 Java Media Framework (JMF)、xuggle 和 VLC Java bindings 是视频播放器的其他选项(另请参阅 A simple way of embedding a video in my Swing GUI)。

最后,一个完整且有效的示例将有助于了解目前哪些是有效的,哪些是无效的,并将其作为提出改进建议的起点(请查看https://***.com/help/mcve)。

【讨论】:

以上是关于Java 画布不可见的主要内容,如果未能解决你的问题,请参考以下文章

如何通过画布外的按钮(ChartJs)控制画布图像的可见性?

容器的剪辑子项在滚动时不可见

如何在android中使位图不可见? [关闭]

java swing问题:JFrame根面板不透明且可见,内容面板不透明且可见,层面板透明且可见,

java不可见字符 trim

将隐藏的DIV保存为画布图像