1

我遇到了一个问题:我的应用程序中有一个 JMF-Videoplayer,我想在它上面画画(视频继续播放)。我遇到的问题是我使用了 JLayeredPane,我在 Layer.Content_Layer(index 0) 上添加了 VideoPlayer-Control,在 Layer.Modal_Layer(index 300) 上添加了 JPanel (setOpaque(false))。

发生的情况是,当我添加 JPanel 时,它不是不透明的,但我看到了画线,但没有看到视频。如果我之前添加了 JPanel(没有更改图层的索引),我添加了视频控件,然后我看到了视频,但看不到画线。

有人知道为什么这不起作用以及如何使它起作用吗?

我曾考虑在视频控制组件中添加一个 ActionListener,并且每当图像发生变化时,我都会将这张图像绘制为 JPanel 上的背景,但我担心这会花费我宝贵的时间。

我的代码如下所示:

        Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, true );
        mediaPlayer = Manager.createRealizedPlayer(url);

        this.videoPane = new JLayeredPane();
        this.videoPane.setLayout(new BorderLayout());            

        // get the components for the video and the playback controls
        this.video = mediaPlayer.getVisualComponent();
        this.controls = mediaPlayer.getControlPanelComponent();

        this.drawPanel = new JLabel();
        this.drawPanel.setSize(video.getWidth(), video.getHeight());
        this.drawPanel.setOpaque(false);

        if ( video != null )
           this.videoPane.add(video, BorderLayout.CENTER, JLayeredPane.FRAME_CONTENT_LAYER);

        if ( controls != null )
           this.videoPlayerPanel.add( controls, BorderLayout.SOUTH);

        this.videoPane.add(drawPanel, BorderLayout.CENTER, JLayeredPane.MODAL_LAYER);
        this.videoPlayerPanel.add(videoPane, BorderLayout.CENTER);

videoPlayerPanel 也是一个 JPanel,其中包含 JLayeredPane... 如您所见。

编辑:好的,我对其进行了一些研究,发现

mediaPlayer.getVisualComponent();

返回一个 java.awt.Component 并且此类组件不支持不透明度 - 也许这就是我看不到或只看到 drawPanel 的原因。

因此,目前我正试图通过将其添加到自定义面板中直接绘制到视频组件上,在该面板中我覆盖了绘制方法以绘制所有线条。还有其他想法吗?

4

1 回答 1

0

通过这个问题的答案来回答

使用 2 个 JInternalFrames,其中轻量级组件在一个框架上,而重量级 jpanel 在另一个框架上。

于 2010-02-17T16:58:34.860 回答