java-如何在画布上绘制消息?
我正在使用java-如何在画布上绘制消息?,java,swing,canvas,awt,Java,Swing,Canvas,Awt,我正在使用VLCJ创建一个视频播放器 播放器使用画布作为视频表面 videoPlayer.newVideoSurface(canvas); 因此,我必须使用画布 我想在画布上显示消息如“播放器已启动”。我尝试使用JLayeredPane和JLabel来完成这项工作 一个简短的演示代码: package canvasexample; import java.awt.*; import javax.swing.*; import javax.swing.border.LineBorder; p
VLCJ
创建一个视频播放器
播放器使用画布作为视频表面
videoPlayer.newVideoSurface(canvas);
因此,我必须使用画布
我想在画布上显示消息
如“播放器已启动”
。我尝试使用JLayeredPane
和JLabel
来完成这项工作
一个简短的演示代码:
package canvasexample;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
public class CanvasExample extends JFrame
{
public JLabel label = new JLabel("Message");
public Canvas canvas = new MyCanvas();
public CanvasExample()
{
setSize(500, 500);
setLocationRelativeTo(null);
createWindow();
setVisible(true);
}
public void createWindow()
{
JLayeredPane pane = new JLayeredPane();
JPanel panel1 = new JPanel(new BorderLayout());
JPanel panel2 = new JPanel(new BorderLayout());
panel1.setSize(500, 500);
panel2.setSize(500, 500);
label.setBorder(new LineBorder(Color.BLUE));
panel1.add(canvas);
panel2.add(label, BorderLayout.NORTH);
pane.add(panel1, 1, 0);
pane.add(panel2, 2, 0);
add(pane);
}
private class MyCanvas extends Canvas
{
public MyCanvas() {
setBackground (Color.GRAY);
setSize(500, 500);
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillOval(75, 75, 150, 75);
}
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
new CanvasExample();
}
});
}
}
但很快我就发现,不能将重量级AWT
组件和轻量级Swing
组件混合使用
那么,有人能告诉我如何在画布上显示消息吗?如果您试图在需要使用的vlcj嵌入式画布上覆盖静态文本
或者直接在mediaplayer中使用品牌选项
除了文本,您还可以查看覆盖图
或者我还没有尝试过这种方法,你可以创建一个在第1层有画布,可以有JComponent在第0层用透明背景绘制覆盖图的方法,你可以覆盖它的paintComponent()方法并绘制您需要的任何内容您是否考虑过使用Graphics object的drawString方法来实现您的目标?可能与您的问题有关:@AlexeiKovalev是的,我尝试过重写paint()
方法。问题是,它在画布上打印字符串
,但在VLCJ
开始在画布上渲染视频后,字符串就不存在了。由@Frakcool链接的答案正好在这里。如今,我对vlcj的首选方法是使用JavaFX和PixelBuffer解决方案,它的性能很好,您可以在上面覆盖图形和动画。使用Canvas时,您仅限于链接答案中描述的内容。最后一种方法将不起作用。不能将轻量级Swing
组件(如JComponent
)覆盖在重型AWT
组件(如Canvas
)上。