У меня проблема: у меня в приложении есть 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.
Так что в настоящее время я пытаюсь нарисовать непосредственно на компонент видео, добавив его в настраиваемую панель, где я переопределил метод рисования, чтобы нарисовать все линии.
Есть другие идеи?