Java 在VLCJ播放的视频上添加JTextField?

Java 在VLCJ播放的视频上添加JTextField?,java,jframe,jtextfield,vlcj,Java,Jframe,Jtextfield,Vlcj,当到达特定时间时,我尝试在视频顶部添加一个JTextField。我正在使用以下代码: frame.setLocation(100, 100); frame.setSize(0, 0); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //frame.setLayout(null); Canvas c = new Canvas(); c.se

当到达特定时间时,我尝试在视频顶部添加一个JTextField。我正在使用以下代码:

        frame.setLocation(100, 100);
        frame.setSize(0, 0);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setLayout(null);

        Canvas c = new Canvas();
        c.setBackground(Color.black);
        JPanel p = new JPanel();
        p.setLayout(new BorderLayout());
        p.add(c, BorderLayout.CENTER);
        frame.add(p, BorderLayout.CENTER);

        mediaURL = "D:\\Desktop\\movie.mp4";

        MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
        mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(frame));
        mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));
        scoresFrame.setVisible(true);
        mediaPlayer.toggleFullScreen();
        mediaPlayer.setEnableMouseInputHandling(false);
        mediaPlayer.setEnableKeyInputHandling(true);
        mediaPlayer.prepareMedia(mediaURL);
        //mediaPlayer.setRepeat(true);
        mediaPlayer.play();

        mediaPlayer.addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
            public void timeChanged (MediaPlayer mediaPlayer , long time) {
                if (time > 1000 && time < 1500) {
                    frame.setLayout(null);
                    mediaPlayer.pause();
                    JTextField text = new JTextField("test");
                    text.setBounds(250, 370, 50, 50);
                    frame.add(text);
                }
            }
        });
public void timeChanged (MediaPlayer mediaPlayer , long time) {
                    if (time > 1000 && time < 1500) {
                    }
                }
frame.setLocation(100100);
帧设置大小(0,0);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setLayout(空);
Canvas c=新画布();
c、 挫折背景(颜色:黑色);
JPanel p=新的JPanel();
p、 setLayout(新的BorderLayout());
p、 添加(c,BorderLayout.CENTER);
框架。添加(p,边框布局。中心);
mediaURL=“D:\\Desktop\\movie.mp4”;
MediaPlayerFactory MediaPlayerFactory=新的MediaPlayerFactory();
mediaPlayer=mediaPlayerFactory.newEmbeddedMediaPlayer(新的Win32FullScreenStrategy(框架));
mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));
scoresFrame.setVisible(true);
mediaPlayer.toggleFullScreen();
mediaPlayer.setEnableMouseinpAuthHandling(false);
mediaPlayer.setEnableKeyInPurthandling(true);
mediaPlayer.prepareMedia(mediaURL);
//mediaPlayer.setRepeat(true);
mediaPlayer.play();
添加MediaPlayerEventListener(新的MediaPlayerEventTapter(){
公共无效时间已更改(MediaPlayer MediaPlayer,长时间){
如果(时间>1000&&时间<1500){
frame.setLayout(空);
mediaPlayer.pause();
JTextField text=新的JTextField(“测试”);
文本.立根(250,370,50,50);
框架。添加(文本);
}
}
});
JTextField根本不显示。有什么问题吗?还有其他在特定时间暂停视频的建议吗?因为使用此代码:

        frame.setLocation(100, 100);
        frame.setSize(0, 0);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setLayout(null);

        Canvas c = new Canvas();
        c.setBackground(Color.black);
        JPanel p = new JPanel();
        p.setLayout(new BorderLayout());
        p.add(c, BorderLayout.CENTER);
        frame.add(p, BorderLayout.CENTER);

        mediaURL = "D:\\Desktop\\movie.mp4";

        MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
        mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(frame));
        mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));
        scoresFrame.setVisible(true);
        mediaPlayer.toggleFullScreen();
        mediaPlayer.setEnableMouseInputHandling(false);
        mediaPlayer.setEnableKeyInputHandling(true);
        mediaPlayer.prepareMedia(mediaURL);
        //mediaPlayer.setRepeat(true);
        mediaPlayer.play();

        mediaPlayer.addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
            public void timeChanged (MediaPlayer mediaPlayer , long time) {
                if (time > 1000 && time < 1500) {
                    frame.setLayout(null);
                    mediaPlayer.pause();
                    JTextField text = new JTextField("test");
                    text.setBounds(250, 370, 50, 50);
                    frame.add(text);
                }
            }
        });
public void timeChanged (MediaPlayer mediaPlayer , long time) {
                    if (time > 1000 && time < 1500) {
                    }
                }
public void timeChanged(MediaPlayer,长时间){
如果(时间>1000&&时间<1500){
}
}
这不是最好的方法。
感谢您的帮助。

您不能将轻量级组件(您的JTextField)和重量级组件(您用于vlcj的画布)混合使用

你有两个选择

  • 使用透明覆盖,将JTextField添加到覆盖(vlcj测试源中有一些示例显示了这一点)
  • 使用“直接”媒体播放器,您可以自己将视频渲染成一个轻量级组件,即JPanel或其他东西(同样,vlcj测试源中也有示例显示了这一点)