Java: рисовать линии на проигрывателе JMF Lightweight_Rendered - PullRequest
1 голос
/ 11 февраля 2010

У меня проблема: у меня в приложении есть JMF-Videoplayer, и я хочу нарисовать его (пока видео продолжается). У меня проблема в том, что я использую JLayeredPane, где я добавляю элемент управления VideoPlayer на Layer.Content_Layer (индекс 0) и JPanel (setOpaque (false)) на Layer.Modal_Layer (индекс 300).

Что происходит, когда я добавляю JPanel, это не непрозрачно, но я вижу нарисованные линии, но не видео. Если я добавляю JPanel раньше (не изменил индекс слоя), я добавляю элемент управления видео, тогда я вижу видео, но не нарисованные линии.

Кто-нибудь знает, почему это не работает и как я могу заставить это работать?

Я думал о добавлении ActionListener к компоненту video-control и каждый раз, когда изображение меняется, я беру это изображение и рисую его в качестве фона на JPanel, но боюсь, что это будет стоить мне драгоценного времени.

Мой код выглядит так:

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

videoPlayerPanel также является JPanel, который содержит JLayeredPane ... как вы можете видеть.

Edit: Хорошо, я провел небольшое исследование и выяснил, что

mediaPlayer.getVisualComponent();

возвращает java.awt.Component, и такие компоненты не поддерживают прозрачность - возможно, поэтому я не вижу или вижу только drawPanel.

Так что в настоящее время я пытаюсь нарисовать непосредственно на компонент видео, добавив его в настраиваемую панель, где я переопределил метод рисования, чтобы нарисовать все линии. Есть другие идеи?

1 Ответ

0 голосов
/ 17 февраля 2010

ответили на этот вопрос .

с использованием 2 JInternalFrames, где легкий компонент находится на одном кадре, а тяжелый - на другом.

...