2016-04-19 2 views
0

ArrayListに含まれるボタンの数に応じてx個のボタンを追加するダミープロジェクトに取り組んでいます。異なる名前のパネルにJButtonを追加するどうして? (Java)(スイング)

次のコードは、forループブロック実行newボタンを毎回作成しlistOfButtons命名ArrayListに追加します。

次に、listOfButtonsに含まれているボタンをパネルに追加するだけです。

for (int i = 0; i < 10; i++) { 
     panel.add(listOfButtons.get(i)); 
    } 

このコンテキストでは、私の質問はなぜですか?同じ名前のユニークなボタンオブジェクトを作成するにはどうすれば合法でしょうか:button。私はいつもオブジェクトの作成を次のように理解しています。プログラマーが別の参照変数と同じ名前の新しいObject参照変数を作成すると、新しい参照変数はメモリ内の別の単一オブジェクトを指します。

+0

ループ内に新しいボタンを作成すると、そのボタンが「ローカル」に定義されます。これは、各反復において、 'button'と呼ばれる古い変数が不明であることを意味します(リストへの参照があなたのリストに存在することを除いて)。その結果、リスト内の各エントリには一意の参照がありますが、エントリ自体には名前がありません。 こんにちは! – jr593

+0

すばらしい答えをいただきありがとうございます。私はすべてをアップアップしていますが、私の評判のために見えません。 – DragonMasa

答えて

0

同じ効果があります。各反復において、参照は新しいものであり、従って部分JButton buttonである。新しいオブジェクトも作成していますので、new JButton(...)です。新しく作成されたオブジェクトに新しい参照ポイントを同じ行に置きます。つまり、=(代入演算子)です。

私たちは、割り当てやオブジェクトの作成についてではなく、重複した参照宣言についてのみ話しています。

これは違法である。このように同様

JButton button; 
JButton button; 

{ 
    JButton button; 
    { 
     JButton button; 
    } 
} 

これは合法である:

参照がばらばらのスコープ内で宣言されているためです
{ 
    JButton button; 
} 

{ 
    JButton button; 
} 

0

これはオブジェクトスコープと関係があります。 forループの繰り返しが完了すると、スコープが変更されたので、名前がbuttonの新しいButtonは異なるスコープになります。

同じ変数名で2つのメソッドを持つ方法とほとんど同じです。

public void method1() { 
    int value = 0; 
} 

public void method2() { 
    int value = 1; 
} 

これらの変数の両方は、範囲が異なるためにも許可されています。

forループの各繰り返しの最後に、button変数参照が破棄されます。リストはまだ見ているかもしれませんが、名前で参照することはできませんbutton

0

buttonには、新しく作成されたJButtonへの参照が含まれています。別のJButtonを作成して新しい参照を割り当てることによって、ボタン上の参照を変更した場合、それは前のものが削除されることを意味しません。

また、この操作を行うことができ、それが参照buttonの範囲がために体である

listOfButtons.add(new JButton("new Button created without assigning it somewhere")); 
関連する問題