我遇到了一个问题:我的应用程序中有一个 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 的原因。
因此,目前我正试图通过将其添加到自定义面板中直接绘制到视频组件上,在该面板中我覆盖了绘制方法以绘制所有线条。还有其他想法吗?