Java 使用GridBagLayout时不显示画布
我制作了一个程序,用2/3的屏幕显示视频,用1/3的屏幕显示评论,所以我使用了GridBagLayout;出于某种原因,画布不会出现,但当我用JButton替换它时,它会工作。你能告诉我怎么解决这个问题吗 重要的部分在Panel类中,另一个代码仅用于指导 最后,我要感谢你对我的帮助Java 使用GridBagLayout时不显示画布,java,user-interface,Java,User Interface,我制作了一个程序,用2/3的屏幕显示视频,用1/3的屏幕显示评论,所以我使用了GridBagLayout;出于某种原因,画布不会出现,但当我用JButton替换它时,它会工作。你能告诉我怎么解决这个问题吗 重要的部分在Panel类中,另一个代码仅用于指导 最后,我要感谢你对我的帮助 public class Intro extends JFrame{ Panel panel = new Panel(); static Canvas canvas; public Intro()
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的默认preferredSize为0x0。因此,当您使用gbc.fill=GridBagConstraints.VERTICAL;,它将简单地拉伸画布以填充垂直空间,但不会更改保持为0的宽度
使用gbc.fill=GridBagConstraints.BOTH;反而
旁注。。。
Swing使用轻型组件,这些组件在单个图形对等或重型容器中渲染。这使得Swing组件具有z顺序相互重叠/铺设的概念
java.awt.Canvas是一个很重的组件,这意味着它不支持z-orderng的概念,因此当您不希望它出现在组件顶部时,它可能会出现问题。您将遇到问题。Canvas是一个重量很重的组件,它不支持z排序,这会影响它的显示方式-请注意。你能在正式回答中解释一下吗?哈哈,这真是我朋友Susan的BTS游戏,因为明天我们将进行圣诞节交换。