JLayeredPane z-order问题

时间:2016-08-08 15:05:49

标签: java swing type-conversion z-order jlayeredpane

在使用JLayeredPane以z顺序添加Compnents时,我注意到了一些问题:

JLayeredPane lp = getLayeredPane();

JButton top = new JButton(); ...
JButton middle = new JButton(); ...
JButton bottom = new JButton(); ...

工作不好:

lp.add(top,2);
lp.add(middle,1);
lp.add(bottom,3);

效果很好:

lp.add(top,new Integer(2));
lp.add(middle,new Integer(1));
lp.add(bottom,new Integer(3));

在这里,您可以看到它的外观:http://i.imgur.com/eqH2El8.png

为什么文字常量不会转换为Integer对象,而且它无法正常工作?

2 个答案:

答案 0 :(得分:3)

本质上,因为它继承自(Container)的类具有在其组件列表(add(Component comp, int layer))中的给定位置添加Component的功能,以及添加具有任何给定参数的组件(将传递给LayoutManager)(add(Component comp, Object constraint))。

为了调用正确的函数(和JLayeredPane的LayoutManager来接收约束),参数必须是对象Integer而不是原始int

答案 1 :(得分:3)

  

为什么文字常量不会转换为Integer对象,而且它无法正常工作?

您需要查看add(...)方法的API。

Container类有一个方法接受" int"作为参数。这用于FlowLayout之类的布局,您可以在指定位置插入组件。

JLayeredPane类有一个方法接受"整数" value来指定组件的分层。

因此,您无法依靠自动装箱将int转换为整数。