我怎样才能不让播放器占满整个房间呢?



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

虽然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();
    }
}

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

基本上,窗口有两个部分:一个左面板,我在其中显示一些数据,和一个右面板,其中视频是嵌入。面板放在一起的JSplitPane是为了让用户分配他想要的玩家(因此,视频本身)的空间量。首先,组件的宽度分别为100和200像素。

问题是:EmbeddedMediaPlayerComponent变得有点太舒服了。虽然我将其设置为200x100的首选大小,但一旦移动了垂直分割,它就拒绝缩小。也就是说,我不能让播放器的宽度低于200像素,而一旦我放大了它,我就不能让它回到200像素……设置最大大小不会改变任何东西。这个小问题很烦人,因为它迫使我的左面板一次又一次地缩小,直到它几乎看不见。

是否有任何方法可以让媒体播放器遵循JSplitPane设置的约束,因为用户试图调整组件的大小?如果它有任何用处,在我的应用程序中,左窗格包含一个JTree,它也会被玩家碾碎。

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

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

相关内容

  • 没有找到相关文章

最新更新