我有一个主类,我的所有gui组件都被称为Math.java。在一个单独的类(Calc)中,我得到了所有组件,并将它们保存在Calc的构造函数中的Math的本地组件中。唯一不起作用的是当我尝试获取其中一个组件的父组件时,它总是返回null。当我直接访问数学中的JLabel时,它可以工作。
cards []是一个JLabel数组。 panel2a和图层是JPanels。
public void clear()
{
for(int i =0;i <cards.length; i++)
{
//this works, calling the components directly
if(math.cards[i].getParent().equals(math.panel2a) )
{
math.panel2a.remove(cards[i]);
layer.add(cards[i]);
layer.repaint();
}
//this doesn't work, using the local components
if(cards[i].getParent().equals(panel2a) )
{
panel2a.remove(cards[i]);
layer.add(cards[i]);
layer.repaint();
}
}
}
答案 0 :(得分:0)
如果两个数组实际上保持对同一个对象的引用,那么根据对象引用的存储位置,任何该对象的方法都无法表现出不同的行为(我知道)。换句话说,如果它是同一个对象,那么math.cards[i] == cards[i]
并且绝对没有办法让您获得不同的结果,具体取决于您是拨打math.cards[i].anyMethod()
还是{{1} }。
由于您看到不同的结果,因此阵列不能具有相同的对象。您可能还没有将本地cards[i].anyMethod()
数组的内容添加到任何容器中。另外请记住,当您将组件添加到一个容器时,该组件会自动从其可能已存在的任何容器中删除。