[英]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.