gpt4 book ai didi

java - 使JPanel背景透明且文本不重叠

转载 作者:行者123 更新时间:2023-11-30 09:20:41 25 4
gpt4 key购买 nike

我正在制作一个类似于字幕播放器的东西,可以播放视频。

我想让背景透明,这样文本所在的框就不会干扰后面播放的电影/电视节目。我已经尝试了两种方法来做到这一点,每种方法都会导致同样的问题。下一句出现时文本不会消失。如果背景是一种颜色(例如:Color.red),那么这很好用。一段时间后,我调用 text.setText("next sentence"),但这不适用于透明背景。相关代码如下。文本是一个 JTextField

我应该提一下视频不在这个程序中。本节目只有字幕。

第一种方式:

text.setBackground(new Color(0,0,0,0));

第二种方式:(使用透明图片)

Graphics c = myPicture.getGraphics();
text.paintAll(c);

我这样更新文本。

Thread.sleep(Graphix.subtitles.get(counter).getStart());
text.setText(Graphix.subtitles.get(counter).getText());

这也使它重叠。

text.setForeground(Color.blue);
text.setBackground(new Color(0,0,0,0));
text.setOpaque(false);

Main中的相关代码如下。

final JFrame JFwindow = new JFrame("Subtitles");
JFwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFwindow.getContentPane().add(new Subtitles());
JFwindow.setSize(1300, 150);
JFwindow.setUndecorated(true);
JFwindow.setBackground(new Color(0,0,0,0f));
JFwindow.pack();
JFwindow.setVisible(true);

最佳答案

  • 透明度是通过调用 JPanel#setOpaque 并传递给它 false 来实现的。
  • 您永远不应该调用 getGraphicsgetGraphics 并返回 null 并且充其量只是作为快照。一旦 RepaintManager 开始新的绘制周期,绘制到它的结果将被覆盖。
  • 使用 tarnsparent 颜色只会混淆 RepaintManager,因为它不知道它需要在组件下绘制
  • 在事件调度线程 (EDT) 中 hibernate 将阻止 Swing 执行任何更新(以及处理任何事件)。相反,我建议使用 javax.swing.Timer。参见 Concurrency in Swing了解更多详情。
  • 如果您使用的是 VLC 绑定(bind),则无法实现
  • 不要忘记让包含子标题的所有父容器也透明

关于java - 使JPanel背景透明且文本不重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17288761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com