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