Как рисовать на EmbeddedMediaPlayerComponent [VLCJ] - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь нарисовать на EmbeddedMediaPlayerComponent (из VLCJ 4), чтобы впоследствии я мог рисовать изображения или пользовательские анимированные объекты кнопок поверх воспроизводимого видео. Вот мой код:

код-листинг 1: Main.java

public class Main {

    public static void main(String[] args) {
        AppFrame appFrame = new AppFrame();
        appFrame.play("path/to/video.mp4");
    }

}

код-листинг 2: AppFrame.java

import javax.swing.JFrame;

public class AppFrame extends JFrame {

    private AppPanel appPanel;

    public AppFrame(){
        super("VLCJ JFrame");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(800,600);
        appPanel = new AppPanel();
        this.setContentPane(appPanel);
        this.setVisible(true);
    }

    public void play(String path) {
        Thread thread = new Thread(appPanel);
        thread.start();

        appPanel.mediaPlayer().media().play(path);
    }
}

листинг кода 3: AppPanel.java

import java.awt.*;

import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent;

public class AppPanel extends EmbeddedMediaPlayerComponent implements Runnable {

    private Rectangle r = new Rectangle(0,0,100,100);

    public AppPanel(){
        setLayout(null); //commenting this line will show the video
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.GREEN);
        g.fillRect(this.getWidth()/2-r.width/2, this.getHeight()/2-r.height/2, r.width, r.height);
    }

    public void run() {
        while(true){
            try {
                Thread.sleep(75);
            } catch (InterruptedException ex) {}
            repaint();
        }
    }
}

Проблема заключается в том, что я комментирую строку в конструкторе AppPanel.java, которая говорит setLayout (null)(строка, которая, кстати, мне не нужна), видео появится. И если я не прокомментирую это, тогда видео исчезнет, ​​и в этом месте мы увидим зеленый квадрат, который должен появиться сверху видео. А за этим зеленым квадратом - черный фон (обычно это не цвет JPanel, который расширяет EmbeddedMediaPlayerComponent).

...