Java Canvas不可见

时间:2015-11-20 15:10:24

标签: java swing canvas javafx awt

在我的JavaApplication中,我的JFrame中有一个JLayeredPane。 JLayeredPane包含一个Canvas作为下面板,我在其中显示带有videoplayer框架的Video。在较高级别,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)并且具有与canvas和浏览器相同的大小。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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

最后,一个完整且有效的示例将有助于了解当前的工作内容和工作内容,以及建议改进的起点(请查看https://stackoverflow.com/help/mcve)。< / p>