【问题标题】:Text Overlay on JPanelJPanel 上的文本叠加
【发布时间】:2014-09-25 19:34:27
【问题描述】:

我使用 VLCj 编写了一个媒体播放器; 我正在尝试复制 VLC 播放器,这样当按下空格键时,屏幕上会短暂出现“播放”一词。这可能吗?

我将如何展示这个临时叠加层?

【问题讨论】:

  • 这会很困难并且容易出错,因为 VLCj 使用Canvas 作为它的主要视图,混合 Swing 和 AWT 组件在最好的时候可能会出现问题。你试过什么?
  • 喜欢this?
  • 你用的是jvlc,还是vlcj?您可能想检查您的标签。

标签: java swing vlcj


【解决方案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 测试源中的各种示例中进行了演示。有用于选取框、轻量级和重量级覆盖的测试示例。

但使用选取框是最简单的方法,因此值得推荐。

【讨论】:

  • 非常感谢。但是,当使用全屏播放器时它不起作用(类似于 FullScreenPlayerX 看到的 VlcJ 测试源)。选取框出现一帧然后消失。
  • 您使用的是哪种方法? Builder API 还是其他 API?如果在 .apply() 之前将 .enable() 添加到构建器 API 版本,它应该可以工作。我刚刚测试了它,它很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2012-07-15
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多