2016-03-13 1 views
1

J'essaye d'ajouter un JTextField au dessus d'une vidéo quand j'atteins une heure spécifique. J'utilise ce code:ajouter un JTextField sur une vidéo jouée par VLCJ?

 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); 
       } 
      } 
     }); 

le JTextField n'apparaît pas du tout. Quel peut être le problème? et d'autres suggestions pour mettre en pause la vidéo à un moment précis? parce que l'utilisation de ce code:

public void timeChanged (MediaPlayer mediaPlayer , long time) { 
        if (time > 1000 && time < 1500) { 
        } 
       } 

ne semble pas être le meilleur moyen. Merci de votre aide.

Répondre

1

Vous ne pouvez pas mélanger des composants légers (votre JTextField) et des composants lourds (le Canvas que vous utilisez pour vlcj).

Vous avez deux options ...

  1. Utilisez un revêtement transparent, ajoutant votre JTextField à la superposition (il existe des exemples dans les sources de test vlcj qui montrent ce)
  2. Utiliser un média 'direct' joueur, où vous rendre la vidéo vous-même dans un composant léger, à savoir un JPanel ou quelque chose (encore une fois, il existe des exemples dans les sources de test vlcj qui montrent cela)
+0

ok, je vais chercher la solution .. merci beaucoup! –