gpt4 book ai didi

java - 使用 GridBagLayout 时 Canvas 不出现

转载 作者:行者123 更新时间:2023-12-02 09:11:02 25 4
gpt4 key购买 nike

我做了一个程序,要在屏幕的2/3处显示视频,在屏幕的1/3处显示注释,所以我使用了GridBagLayout;由于某种原因, Canvas 没有出现,但是当我用 JButton 替换它时,它就可以工作了。你能告诉我如何解决这个问题吗?

重要的部分在Panel类中,其他代码仅供引用。

最后,我要感谢你对我的帮助;)

public class Intro extends JFrame{

Panel panel = new Panel();
static Canvas canvas;

public Intro(){
add(panel);
}

public static void receive(Canvas canvas1){
canvas = canvas1;
}

public static void main(String[] args) {
Intro intro = new Intro();
intro.setSize(1150, 680);
intro.setLocationRelativeTo(null);
intro.setVisible(true);
intro.setDefaultCloseOperation(EXIT_ON_CLOSE);

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(intro));
emp.setVideoSurface(mpf.newVideoSurface(canvas));
// emp.setEnableMouseInputHandling(false);
// emp.setEnableKeyInputHandling(false);
emp.prepareMedia("D:\\Crab Rave.mp4");
emp.play();
}
}

class Panel extends JPanel{

JLabel label;

public Panel(){
setLayout(new GridBagLayout());

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

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx=0;
gbc.gridy=0;
gbc.gridheight=2;
gbc.fill= GridBagConstraints.VERTICAL;
gbc.weightx=1;
gbc.weighty= 1;
Intro.receive(canvas);
add(canvas, gbc);

label = new JLabel("Hi there");
gbc.gridx=0;
gbc.gridy=2;
gbc.gridheight=1;
gbc.fill= GridBagConstraints.VERTICAL;
gbc.weightx=1;
gbc.weighty= 1;
add(label, gbc);
}
}

最佳答案

好的,java.awt.Canvas 的默认 preferredSize0x0。因此,当您使用 gbc.fill = GridBagConstraints.VERTICAL; 时,它只会拉伸(stretch) Canvas 以填充垂直空间,但不会更改宽度(仍为 0 )。

改用gbc.fill = GridBagConstraints.BOTH;

旁注...

Swing 使用“轻量级”组件,这些组件在单个图形对等体(或重量级容器)中呈现。这使得 Swing 组件具有“z 排序”的概念(彼此重叠/放置)。

java.awt.Canvas 是一个“重量级”组件,意味着它不支持 z-ordeirng 的概念,因此当它出现在组件顶部时,您可能会遇到问题你没有预料到它。

关于java - 使用 GridBagLayout 时 Canvas 不出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com