Java: Desenhe linhas em um JMF Lightweight_renderd Player
-
19-09-2019 - |
Pergunta
Tenho um problema: tenho um JMF-Videoplayer no meu aplicativo e quero desenhar sobre ele (enquanto o vídeo continua). O problema que tenho é que uso um JlayeredPane, onde adiciono o VideoPlayer-Control na camada.content_layer (índice 0) e um jpanel (Setopaque (false)) na camada.modal_layer (índice 300).
O que acontece é que, quando adiciono o JPanel, não é opaco, mas vejo as linhas desenhadas, mas não o vídeo. Se eu adicionar o JPanel antes (não mudou o índice da camada), adiciono o controle de vídeo, vejo o vídeo, mas não as linhas desenhadas.
Alguém tem uma ideia por que isso não funciona e como eu poderia fazê -lo funcionar?
Pensei em adicionar um Listener Action ao componente de controle de vídeo e o Evertime a imagem muda, pego essa imagem e a pinto como plano de fundo no JPanel, mas tenho medo de que isso me custe tempo precioso.
Meu código se parece com o seguinte:
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);
O videoplayerPanel também é um JPanel que contém o JlayeredPane ... como você pode ver.
EDIT: Ok, eu coloquei algumas pesquisas e descobri que
mediaPlayer.getVisualComponent();
Retorna um java.awt.component e esses componentes não suportam opacidade - talvez seja por isso que não consigo ver ou ver apenas o drawpanel.
Então, atualmente, estou tentando desenhar diretamente para o componente de vídeo, adicionando-o a um painel personalizado, onde substituo o método de tinta para desenhar todas as linhas. Alguma outra idéia?
Solução
respondido pela resposta a isso pergunta.
Usando 2 Jinternalframes, onde o componente leve está em um quadro e o peso pesado no outro.