Java LayeredPane LayoutManager add()方法冲突

时间:2016-05-22 16:40:29

标签: java swing layout-manager jlayeredpane

假设我有一个名为JLayeredPane的{​​{1}}正在使用mainPanel。我还有一个名为BorderLayout的{​​{1}}包含图片。如何将JLabel添加到backgroundLabel的底层?

backgroundLabel

以上这一行似乎是一个明显的答案,如果mainPanel使用的是null布局,它就会起作用。 mainPanel.add(backgroundLabel, new Integer(-1), new Integer(0)); 中的mainPanel不喜欢命令,并提供以下堆栈跟踪。

BorderLayout

如何将mainPanel添加到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) 的底层而不与backgroundLabel冲突?

1 个答案:

答案 0 :(得分:3)

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约束,而不是具有该值的Integer -1,例如

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

我的目的是将backgroundLabel添加到其所有其他组件后面的底层。

JLayeredPane上设置布局会使组件像在一层上一样。"而是在占据最深层的组件上设置布局,并将标签添加到该组件。在此example中,标签和按钮会添加到具有默认JPanel的每个图层FlowLayout中。