2014-09-25 97 views
1

我已经使用VLCj编写了一个媒体播放器; 我试图复制VLC播放器,这样当按下空格键时,屏幕上会短暂出现“播放”一词。这可能吗?JPanel上的文字覆盖

我该怎么去看看这个临时覆盖图?

+0

这将是困难和容易出错的,因为VLCj使用'Canvas'作为主视图,所以混合Swing和AWT组件在最佳时机可能会出现问题。你有什么尝试? – MadProgrammer 2014-09-25 00:22:24

+0

赞[this](http://stackoverflow.com/q/6725618/230513)? – trashgod 2014-09-25 03:02:28

+0

您使用的是jvlc还是vlcj?你可能想检查你的标签。 – caprica 2014-09-25 06:35:38

回答

1

与vlcj做到这一点的一种方法是使用“选取框”。

选取框由本地LibVLC库函数提供,由vlcj包装。

第一:

import static uk.co.caprica.vlcj.player.Marquee.marquee; 

然后在你的鼠标点击监听器:

marquee() 
    .text("Play") 
    .location(x, y) 
    .position(libvlc_marquee_position_e.bottom) 
    .opacity(0.7f) 
    .colour(Color.white) 
    .timeout(5000) 
    .size(20) 
    .apply(mediaPlayer); 

这是API的 “建设者” 的风格,有一个带有字幕,如个别方法的另一个API:

mediaPlayer.setMarqueeText("Play"); 
mediaPlayer.setMarqueeSize(60); 
mediaPlayer.setMarqueeOpacity(70); 
mediaPlayer.setMarqueeColour(Color.green); 
mediaPlayer.setMarqueeTimeout(3000); 
mediaPlayer.setMarqueeLocation(300, 400); 
mediaPlayer.enableMarquee(true) 

所有这一切都被记录在vlcj的Javadoc:

http://caprica.github.io/vlcj/javadoc/3.0.0/uk/co/caprica/vlcj/player/Marquee.html http://caprica.github.io/vlcj/javadoc/3.0.0/uk/co/caprica/vlcj/player/MediaPlayer.html

还有其他办法...

你可以尝试用叠加在视频的顶部绝对定位的AWT标签,这会工作,但标签将不会有一个透明背景。

您可以使用所谓的“直接”渲染媒体播放器(您自己渲染视频的位置),然后您可以在视频顶部绘制自己的图形,或使用Swing JLabel。在这种情况下,您可以使用透明度。

您甚至可以在视频窗口顶部覆盖透明的顶层窗口,并在该窗口中绘制/放置标签。

所有这些方法都在vlcj测试源中的各种示例中演示。有跑马灯的测试例子,以及轻量级和重量级的叠加。

但使用选框是最简单的推荐方法。

+0

这真是太好了,谢谢。 但使用全屏播放器时不起作用(与FullScreenPlayerX类似,可见VlcJ测试源)。选框出现一帧并消失。 – Ofek 2014-09-25 12:24:17

+0

您正在使用哪种方法? Builder API或其他API?如果在.apply()之前将.enable()添加到构建器API版本,它应该可以工作。我只是测试它,它很好。 – caprica 2014-09-25 16:19:29