2

メイン クラスがあり、すべての GUI コンポーネントが Math.java という名前で作成されています。別のクラス (Calc) で、すべてのコンポーネントを取得し、Calc のコンストラクターで Math からローカル コンポーネントに保存します。動作しない唯一のことは、コンポーネントの 1 つの親コンポーネントを取得しようとすると、常に null が返されることです。Math で JLabels に直接アクセスすると、機能します。

cards[] は JLabels の配列です。panel2a と layer は 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();
        }
   }
}
4

1 に答える 1

0

2つの配列が実際に同じオブジェクトへの参照を保持している場合、オブジェクト参照が格納されている場所に応じて、そのオブジェクトのメソッドのいずれかが異なる動作をする方法(私が知っている)はありません。つまり、同じオブジェクトであれば、を呼び出すか を呼び出すかmath.cards[i] == cards[i]によって異なる結果が得られることは絶対にありません。math.cards[i].anyMethod()cards[i].anyMethod()

異なる結果が表示されるため、配列に同じオブジェクトが含まれていてはなりません。cardsローカル配列の内容をどのコンテナにも追加していない可能性があります。また、1 つのコンテナーにコンポーネントを追加すると、そのコンポーネントが既に含まれているコンテナーから自動的に削除されることにも注意してください。

于 2013-08-09T20:36:53.700 に答える