Java Canvas不可见

vwkv1x7d  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(101)

在我的JavaApplication中,我在JFrame中有一个JLayeredPanel。JLayeredPanel包含一个Canvas作为下层面板,在那里我显示一个带有视频播放器框架的视频。在上层,JLayeredPanel包含一个JFXPanel,在那里我显示一个JavaFX.WebView。WebView是完全透明的。
问题是Canvas只在WebView没有显示的地方可见,我从WebView所在的JFrame看到背景。如果我禁用JFXPanel,我可以看到整个Canvas和视频。
我还尝试添加一个JPanel作为较低的级别。结果就像我想成为画布。我可以看到完整的JPanel,并在它的顶部,它显示WebView。
那么,我能做些什么来使画布足够强大,以显示整个框架。我认为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是JLayeredObject。它是setVisible(true),大小与画布和浏览器相同。

9udxz4iz

9udxz4iz1#

正如Gilbert Le Blanc已经提到的,混合AWT,Swing和JavaFX组件可能会使您的项目不必要地复杂化(请参阅mixing awt and swing in GUI programming using JavaJavaFX Tip 9: Do Not Mix Swing / JavaFX)。如果您能找到基于Swing的Web查看器和视频播放器,它将更容易使其工作。
例如,您可以同时查看Web查看器和视频播放器的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)。

相关问题