编程语言
首页 > 编程语言> > Java LayeredPane LayoutManager add()方法冲突

Java LayeredPane LayoutManager add()方法冲突

作者:互联网

假设我有一个名为MainPanel的JLayeredPane,它使用BorderLayout.我还有一个名为backgroundLabel的JLabel,其中包含一个图像.我该如何将backgroundLabel添加到mainPanel的底层?

mainPanel.add(backgroundLabel, new Integer(-1), new Integer(0));

上一行似乎是显而易见的答案,并且在mainPanel使用null布局的情况下可以使用. mainPanel中的BorderLayout不喜欢该命令,并提供以下堆栈跟踪.

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: cannot add to layout: constraint must be a string (or null)
at java.awt.BorderLayout.addLayoutComponent(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)

如何在不与BorderLayout冲突的情况下将backgroundLabel添加到mainPanel的底层?

解决方法:

How to Use Layered Panes: Laying Out Components in a Layered Pane中所述,“ Java平台提供的所有布局管理器都将组件安排为好像它们都在一层上.”您已指定BorderLayout.您对add()的调用将调用addImpl(java.awt.Component, java.lang.Object, int).由于BorderLayout实现了LayoutManager2,所以constraints参数的值必须是为BorderLayout定义的String约束,而不是值为-1的Integer,例如

mainPanel.add(backgroundLabel, BorderLayout.SOUTH, 0);

My intent is for the backgroundLabel to be added to it’s own bottom layer behind all other components.

在JLayeredPane上设置布局将使“组件看起来好像都在一层上”.而是在占据最深层的组件上设置布局,然后将标签添加到该组件.在此example中,将标签和按钮添加到具有默认FlowLayout的每个图层的JPanel中.

标签:swing,layout-manager,jlayeredpane,java
来源: https://codeday.me/bug/20191118/2029593.html