2016-04-18 2 views
0

名前を100回書く必要なく100個のオブジェクト名を呼びたい B1、B2、B3という名前の100個のボタンがあるとしましょう。 たとえば、それらを表示するように設定したいので、ループ内のシリアルオブジェクト名を呼び出す方法は?

B1.setVisible(true); 

というように、残り99オブジェクト のため私は、すべての新しいオブジェクトを回すループ内でそれらを入力する必要が 見え設定私はB"i".setVisible(true);を試みたが、IDEは それを受け入れなかった私はB%.setVisible(true);を試してみましたが、私はそうではない取得します% 重要な注記を置き換える方法を知っている:100個のオブジェクトが既に存在する ありがとう

+0

'java.util.Map'実装を使用してください。 –

+3

またはオブジェクトの配列を使用する – STF

+0

配列に入れて配列全体をループし、それらをすべて非表示に設定する – bpgeck

答えて

5

Listにボタンを追加します - あなたは、ループ内で、ボタンのテキストとその動作が十分に類似している場合があることを行うことができます。

... 
List<Button> buttons = new ArrayList<>(); 
for (int count = 0; count < 100; count++) { 
    Button myButton = new Button("b" + count); 
    buttons.add(myButton); 
} 
... 

その後、あなたはリストおよびアクセスすべてのボタンを反復処理することができます。

... 
for (Button b : buttons) { 
    b.setVisible(true); 
} 
... 
+0

ボタンがすでに作成されています –

+0

100ボタンを追加する! 同じ問題 –

+0

あなたは**いくつかの場所でそれらを作成しています - 通常、ボタンにはいくつかの特定の動作が割り当てられており、一意のテキストが割り当てられていますが、ボタンが似ていればループでも同様に作成できます。 –

2

彼らはあなたがリフレクションを使用することができますオブジェクトの一部であれば。 http://tutorials.jenkov.com/java-reflection/fields.html

パフォーマンスが賢明それは最高ではないですが、あなたはこれを必要とするレガシーアプリを持っている場合、あなたはおそらくこれよりも道最悪を持っている。

ここではあなたが必要と一致するコードどのように見えるかです。

MyObject objectInstance = new MyObject(); 
Class aClass = MyObject.class 
for(int i = 1; i <=100; i++){ 
    Field field = aClass.getField("B"+i); 
    // get the value 
    Object value = (Button)field.get(objectInstance); 
    // set the value 
    field.set(objetInstance, value); 
} 
関連する問題