У меня есть черные полосы вокруг моего видеоплеера, как показано на рисунке ниже. Как я могу избавиться от них? Я попытался установить размеры в классе AVPlayer, но в то время как это остановило случайное изменение размера видеопроигрывателя, оно не избавилось от черных полос.Как удалить черные полосы из холста vlcj и расширить холст до двух строк GridBagLayout?
Мой второй вопрос: как сделать так, чтобы видеоплеер сидел там, где он есть сейчас, но немного движется вверх, чтобы верхняя часть проигрывателя находилась в том же ряду, что и выпадающий список? Сейчас он находится в той же строке, что и JLabel, отображающий «английский», но я хочу, чтобы он расширялся на обеих строках.
Ниже вы найдете мой SSCCE. Это еще немного, но я избавился от всех зависимостей. Вы должны получить изображение выше, если вы его скомпилируете. Я поместил класс AVPlayer в качестве внутреннего класса для упрощения кода, на самом деле он имеет свой собственный класс. Вам нужно будет добавить источник видео для воспроизведения видеопроигрывателя.
public class SSCCE extends JPanel {
private final JLabel kanjiLabel;
private final JLabel englishLabel;
private final JPanel wordPanel, cbPanel;
private final JComboBox chapters;
private final DefaultComboBoxModel model;
private final JLabel chapLabel = new JLabel("Chapter");
private AVPlayer player;
private final GridBagConstraints constraints = new GridBagConstraints();
public SSCCE() {
setLayout(new GridBagLayout());
setConstraints();
//wordPanel
wordPanel = new JPanel();
wordPanel.setLayout(new BoxLayout(wordPanel, BoxLayout.Y_AXIS));
wordPanel.setPreferredSize(new Dimension(500, 150));
kanjiLabel = new JLabel();
englishLabel = new JLabel();
kanjiLabel.setFont(new java.awt.Font("Dialog", 0, 50));
englishLabel.setFont(new java.awt.Font("Dialog", 0, 40));
wordPanel.add(englishLabel);
wordPanel.add(Box.createRigidArea(new Dimension(10, 10)));
wordPanel.add(kanjiLabel);
//chapter combox
chapters = new JComboBox();
model = new DefaultComboBoxModel();
chapters.setModel(model);
cbPanel = new JPanel();
addCB();
constraints.gridy += 1;
add(wordPanel, constraints);
//add the audio video panel
player = new AVPlayer();
constraints.gridx += 1;
add(player, constraints);
}
private void setConstraints() {
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets = new Insets(5, 5, 5, 5);
constraints.anchor = GridBagConstraints.CENTER;
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1.0;
constraints.weighty = 0.0;
}
private void addCB() {
setConstraints();
cbPanel.removeAll();
cbPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 5));
cbPanel.add(chapLabel);
cbPanel.add(chapters);
add(cbPanel, constraints);
}
public void displayNewWord() {
kanjiLabel.setText("Kanji");
englishLabel.setText("English");
player.playVideo("video.mp4"); //replace this with a video on your computer
revalidate();
repaint();
}
public class AVPlayer extends JPanel {
private static final String VLCPATH = "C:\\VideoLAN\\VLC";
private final MediaPlayerFactory mpf;
private final EmbeddedMediaPlayer emp;
public AVPlayer() {
//this panels sizes
setPreferredSize(new Dimension(150, 150));
setMinimumSize(new Dimension(150, 150));
setMaximumSize(new Dimension(150, 150));
//canvas
setLayout(new BorderLayout());
Canvas canvas = new Canvas();
canvas.setPreferredSize(new Dimension(150, 150));
add(canvas, BorderLayout.CENTER);
//load the native vlc library
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), VLCPATH);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
mpf = new MediaPlayerFactory();
emp = mpf.newEmbeddedMediaPlayer();
emp.setVideoSurface(mpf.newVideoSurface(canvas));
}
public void playVideo(String path) {
emp.prepareMedia(path);
emp.play();
emp.setRepeat(true);
}
}
}
И основной метод
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SSCCE sscce = new SSCCE();
frame.add(sscce, BorderLayout.NORTH);
frame.setVisible(true);
sscce.displayNewWord();
frame.revalidate();
Лучше не задавать два разных вопроса в одном сообщении и вместо этого размещать их как отдельные вопросы. Ваш второй вопрос не связан с vlcj и является более общим вопросом Swing. Я добавил ответ на первый вопрос, который вы задали (о vlcj). – caprica