如何让vlcj播放器占用所有房间?

时间:2015-08-03 17:25:44

标签: java swing vlcj jsplitpane

我正在编写一个小型Swing程序,其中包括在界面中嵌入视频播放器。为了实现这一点,我正在使用vlcj。

虽然GUI本身有更多的组件,但这里有一个模拟代码结构:

category android

(我单独尝试了这个代码,我面临的问题与我的GUI相同)

基本上,窗口有两个部分:左侧面板,其中我显示一些数据,右侧面板,其中嵌入视频。这些面板以import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent; import javax.swing.*; import java.awt.*; public class MyTestClass extends JFrame { public MyTestClass(){ EmbeddedMediaPlayerComponent playerCmpt = new EmbeddedMediaPlayerComponent(); playerCmpt.setPreferredSize(new Dimension(200, 100)); JPanel leftPane = new JPanel(); leftPane.setPreferredSize(new Dimension(100, 100)); JSplitPane mainSplit = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, leftPane, playerCmpt); this.add(mainSplit); this.pack(); this.setVisible(true); } public static void main(String[] args){ new MyTestClass(); } } 的顺序组合在一起,以允许用户为播放器分配他想要的空间量(因此,对于视频本身)。首先,组件的宽度分别为100和200像素。

问题是:JSplitPane变得有点太舒服了。虽然我已将其设置为首选大小200x100,但一旦移动垂直分割,它就会拒绝缩小。也就是说,我无法将播放器的宽度调整到200像素以下,一旦我将其放大,我就无法将其重新调整为200像素...设置最大尺寸并不是&#39改变任何事情。这个小问题很烦人,因为它迫使我的左侧面板一次又一次地收缩,直到它变得几乎看不见。

当用户尝试调整组件大小时,有没有办法让媒体播放器遵循EmbeddedMediaPlayerComponent设置的约束?如果它有用,左侧窗格在我的应用程序中包含JSplitPane,也会被播放器压碎。

1 个答案:

答案 0 :(得分:2)

这个对我有用。只需改进代码以适合您的目的。

import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import java.awt.*;
import javax.swing.*;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;


public class MyTestClass extends JFrame {

    public MyTestClass() {
        String vlcPath = "C:\\Program Files (x86)\\VideoLAN\\VLC";

        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), vlcPath);
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

        EmbeddedMediaPlayerComponent playerCmpt = new EmbeddedMediaPlayerComponent();
        playerCmpt.setPreferredSize(new Dimension(200, 100));

        JPanel leftPane = new JPanel();
        leftPane.setPreferredSize(new Dimension(100, 100));

        JPanel playerPanel = new JPanel(new BorderLayout());
        playerPanel.add(playerCmpt);

        JSplitPane mainSplit = new JSplitPane(
            JSplitPane.HORIZONTAL_SPLIT,
            leftPane, playerPanel);

        playerPanel.setMinimumSize(new Dimension(10, 10));

        this.add(mainSplit);
        this.pack();
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {
        new MyTestClass();
    }
}