繁体   English   中英

调整 JFrame 的大小时,JPanels 会缩小

[英]JPanels shrink when JFrame is resized

我正在用 VLCJ 制作视频播放器; 在上面和下面我有两个 JPanel 来显示一些信息,在中间我有 canvas 播放视频。 问题是,当我调整 JFrame 的大小时,JPanels 缩小并且 Canvas 展开,但是当我放置一个按钮而不是 Z6EA5359E01A4184288494312551828B 时,没有任何变化。 当 JFrame 使用 GridBagLayout 调整大小时,您知道如何保持 JPanel 的大小吗?

片段:

public class Test extends JFrame {

  static Test frame;
  static Canvas canvas;
  static int video = 1;
  JButton button;

    public Test() {
    setLayout(new GridBagLayout());
      GridBagConstraints gbc = new GridBagConstraints();

        JPanel followTo = new JPanel();
          gbc.gridy=0;
          gbc.weightx=1;
          gbc.weighty= 0.11;
        add(followTo, gbc);

        canvas = new Canvas();
          canvas.setBackground(Color.BLACK);  

//        button = new JButton();

          gbc.gridy=1;
          gbc.weightx=1;
          gbc.weighty= 1.02;
          gbc.fill= GridBagConstraints.BOTH;
        add(canvas, gbc);
//        add(button, gbc);

        JPanel controls = new JPanel();
          gbc.gridy=2;
          gbc.weightx=1;
          gbc.weighty=0.16;
        add(controls, gbc);
    }

    public static void main(String[] args) {
        frame = new Test();
          frame.setSize(1200-54,864);
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // /* Comment when using JButton
        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(),"C:\\Program Files\\VideoLAN\\VLC");
          Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
          MediaPlayerFactory mpf = new MediaPlayerFactory();
          EmbeddedMediaPlayer emp = mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(frame));
            emp.setVideoSurface(mpf.newVideoSurface(canvas));
            emp.prepareMedia(url("Toulouse.mp4"));
            emp.play();
        // */
    }

    static String url (String video) {
        String mrl = new Object().getClass().getResource("/media/guide.txt").getFile();
        String url = mrl.replace("/", "\\").split("\\\\",2)[1].split("media")[0].concat("media\\"+video);
          return url;
    }
}

问题是,当我调整 JFrame 的大小时,JPanels 缩小,Canvas 展开,

好吧,你告诉我们正在发生什么,但你没有告诉我们你期望发生什么。

我猜问题是您使用权重约束的方式。

根据提供的代码,我建议您不要使用 GridBagLayout,而应使用BorderLayout

然后将面板添加到框架的代码就是:

add(followTo, BorderLayout.PAGE_START);
add(canvas, BorderLayout.CENTER);
add(controls, Borderlayout.PAGE_END):

现在随着框架大小的变化,所有空间都将分配给 CENTER 中的组件。 顶部/底部的组件将保持固定的高度。

请注意,您也不应该在代码中使用 static 变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM