我是Swing的新手,所以我通读了Java教程和API。我一直在玩JComponent
的子类(DTPicture
-支持拖放)。基本上,我用GridLayout
创建一个面板。然后,用DTPicture
对象填充面板。 DTPicture
继承了getLocation()
。但是,在调用它时,该值为0。但是,当我运行GUI时,我看到DTPicture
对象垂直延伸。那么getLocation
为什么返回0?
谢谢。
下面是我的代码:
*其他所有内容均已初始化,声明,实现。
public class RackBuilderTool extends JPanel{
//maps rack slot # to DTPicture location on JPanel
public static Point[] slotIDArray = new Point[42];
public RackBuilderTool() {
super(new GridLayout(42, 1));
//DTPicture[] rackSlotArray = new DTPicture[42];
for (int i = 0; i < 42; i++) {
//add(new ComponentLabel());
DTPicture temp = new DTPicture(null);
System.out.println(add(temp).getLocation());
//address of DTPicture Component
slotIDArray[i] = temp.getLocation();
}
}
最佳答案
但是,在调用它时,该值为0。
创建组件时,组件的大小(和位置)默认为0。
但是,当我运行GUI时,我看到DTPicture对象垂直延伸
布局管理器负责确定组件的大小/位置。但是,仅在框架上使用pack()
或setVisible(true)
时才调用布局管理器。
如果将组件添加到可见框架,则必须使用revalidate()方法来调用布局管理器。
考虑一下,布局管理器直到所有组件都添加到面板后才能完成工作,因为它不知道如何调整每个组件的大小。特别是在GridLayout的情况下,所有组件的大小都应与最大组件的大小相同。那么,在添加所有组件之前,您如何知道最大的组件?每次添加组件时进行布局并不是非常有效。