J'ai un problème: J'ai un JMF-Video dans mon application et je veux dessiner dessus (pendant que la vidéo continue). Le problème que j'ai est que j'utilise un JLayeredPane où j'ajoute le VideoPlayer-Control sur Layer.Content_Layer (index 0) et un JPanel (setOpaque (false)) sur Layer.Modal_Layer (index 300). Ce qui se passe, c'est que quand j'ajoute le JPanel, il n'est pas opaque mais je vois les lignes tracées mais pas la vidéo. Si j'ajoute le JPanel avant (n'a pas changé l'index de la couche) j'ajoute le video-control puis je vois la vidéo mais pas les lignes tracées.Java: Tracer des lignes sur un lecteur JMF Lightweight_Rendered
Est-ce que quelqu'un a une idée pourquoi cela ne fonctionne pas et comment je pourrais le faire fonctionner? J'ai pensé à ajouter un ActionListener au composant video-control et chaque fois que l'image change, je prends cette image et je la peins comme arrière-plan sur le JPanel mais j'ai peur que cela me coute un temps précieux.
Mon code ressemble à ceci:
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true);
mediaPlayer = Manager.createRealizedPlayer(url);
this.videoPane = new JLayeredPane();
this.videoPane.setLayout(new BorderLayout());
// get the components for the video and the playback controls
this.video = mediaPlayer.getVisualComponent();
this.controls = mediaPlayer.getControlPanelComponent();
this.drawPanel = new JLabel();
this.drawPanel.setSize(video.getWidth(), video.getHeight());
this.drawPanel.setOpaque(false);
if (video != null)
this.videoPane.add(video, BorderLayout.CENTER, JLayeredPane.FRAME_CONTENT_LAYER);
if (controls != null)
this.videoPlayerPanel.add(controls, BorderLayout.SOUTH);
this.videoPane.add(drawPanel, BorderLayout.CENTER, JLayeredPane.MODAL_LAYER);
this.videoPlayerPanel.add(videoPane, BorderLayout.CENTER);
Le videoPlayerPanel est aussi un JPanel qui contient le JLayeredPane ... comme vous pouvez le voir.
Edit: D'accord, je mets des recherches sur elle et a trouvé que
mediaPlayer.getVisualComponent();
retourne un java.awt.Component et ces composants ne supportent pas l'opacité - peut-être c'est la raison pour laquelle je ne vois pas ou seulement voir le drawPanel.
Donc actuellement j'essaye de dessiner directement sur le composant vidéo en l'ajoutant à un panneau personnalisé où je remplace la méthode de peinture pour dessiner toutes les lignes. D'autres idées?