Player vidéo : comment actualiser l'affichage même en pause?

Messages postés
25
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
8 juillet 2010
- - Dernière réponse : cs_hakimus
Messages postés
25
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
8 juillet 2010
- 11 sept. 2008 à 14:19
Bonjour!

Je viens de réaliser un petit player vidéo permettant de charger des fichiers depuis son PC, avec un bouton play/pause et une barre de position classique.

Tout ça fonctionne très bien, mais il me reste un petit problème :
Quand
la vidéo tourne, les déplacements du slider sont pris en compte. Mais
quand elle est en pause, l'affichage ne s'actualise plus! Il faut
obligatoirement refaire play pour que la vidéo saute d'un coup, c'est
moche.

Comment faire pour que l'affichage de la vidéo se mette à jour même quand elle est en pause??
J'ai déjà essayé repaint() et validate(), tous les deux sans succès...

Merci à quiconque aurait une idée! :)
Afficher la suite 

1 réponse

Messages postés
25
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
8 juillet 2010
0
Merci
Rebonjour,

J'ai oublié de préciser que l'appli a été créée avec la JMF.
Voilà le code correspondant au player, que j'appelle dans une JFrame depuis la classe principale :

public class PlayerPanel extends JPanel {
   
    private static final long serialVersionUID = 7353184626575224875L;
   
    private VideoPanel video     = null;
    private JToggleButton button = new JToggleButton();
    private JSlider bar          = new JSlider();
   
    private boolean playing  = true;
   
   
    public PlayerPanel(String file) {
       
        //Initialisation de la video
        video = new VideoPanel(file);
       
        //Initialisation du bouton play/pause
        button = new JToggleButton(new ImageIcon("res\\play_pause.png"));
        button.setMargin(new Insets(0,0,0,0));
       
        //Gestion des clics sur le bouton
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
               
                    if (playing) {
                        playing = false;
                        video.getPlayer().stop();
                    } else {
                        playing = true;
                        video.getPlayer().start();
                    }                   
            }
        });
       
        //Initialisation du slider de position
        bar = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);
       
        //Gestion des déplacement du slider
        bar.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                float tm = bar.getValue();
                tm = (tm / 100)* (float) video.getPlayer().getDuration().getSeconds();
                video.getPlayer().setMediaTime(new Time(tm));
               
                /*
                //Tout ce que j'ai essayé :
                video.getPlayer().getVisualComponent().repaint();
                video.getPlayer().getVisualComponent().validate();
                video.repaint();
                video.validate();
                video.getParent().repaint();
                video.getParent().validate();
                */
            }
           
        });       
       
        // Layout
        SpringLayout layout = new SpringLayout();
       
            // Button en bas à gauche
            layout.putConstraint(SpringLayout.SOUTH, button, 0, SpringLayout.SOUTH, this);
            layout.putConstraint(SpringLayout.WEST, button, 0, SpringLayout.WEST, this);
           
            // Bar à droite
            layout.putConstraint(SpringLayout.SOUTH, bar, -1, SpringLayout.SOUTH, this);
            layout.putConstraint(SpringLayout.EAST, bar, -10, SpringLayout.EAST, this);
            layout.putConstraint(SpringLayout.WEST, bar, 10, SpringLayout.EAST, button);
           
            // Video en haut
            layout.putConstraint(SpringLayout.NORTH, video, 0, SpringLayout.NORTH, this);
            layout.putConstraint(SpringLayout.SOUTH, video, 0, SpringLayout.NORTH, button);
            layout.putConstraint(SpringLayout.EAST, video, 0, SpringLayout.EAST, this);
            layout.putConstraint(SpringLayout.WEST, video, 0, SpringLayout.WEST, this);
       
        this.setLayout(layout);
        this.add(button, layout);
        this.add(video, layout);
        this.add(bar, layout);
       
        this.setVisible(true);
    }
Commenter la réponse de cs_hakimus