2

我有一个主类,我所有的 gui 组件都被称为 Math.java。在一个单独的类 (Calc) 中,我从 Calc 的构造函数中的 Math 获取所有组件并将它们保存在本地组件中。唯一不起作用的是,当我尝试获取其中一个组件的父组件时,它总是返回 null。当我直接访问 Math 中的 JLabels 时,它可以工作。

card[] 是一个 JLabels 数组。panel2a 和 layer 是 JPanel。

 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();
        }
   }
}
4

1 回答 1

0

如果这两个数组确实保存了对同一个对象的引用,那么(据我所知)该对象的任何方法都无法根据对象引用的存储位置而表现出不同的行为。换句话说,如果它是同一个对象,那么math.cards[i] == cards[i]绝对不可能根据您调用math.cards[i].anyMethod()cards[i].anyMethod().

由于您看到不同的结果,因此数组不能具有相同的对象。您可能还没有将本地cards数组的内容添加到任何容器中。另请记住,当您将组件添加到一个容器时,该组件会自动从它可能已经在其中的任何容器中删除。

于 2013-08-09T20:36:53.700 回答