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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top