2016-08-14 30 views
0

私はlabel1、label2、label3、...、label10という10のJLabelを持っています。私はforループを使ってラベルにテキストを設定したいと思います。だから私ができるようにしたいのは次のようなものです:forループでJLabelのプロパティを設定する方法は?

これは明らかに機能しません。

for(int i=1; i<=10; i++){ 
    label+i.setText("label"+i); 
} 

実際にこれを行う方法はありますか?私は本当にこれを行う必要があるので、すべてをハードコードする必要はありません。

答えて

2

JLabelを配列に格納する必要があります。つまり:

JLabel[] labels = new JLabel[10]; 
// Fill that array with your JLables 
for (JLabel l : labels) { 
    l.setText("label"+i); 
} 

これらのlabel1、label2、label3、...、label10変数を削除します。彼らは役に立たない。

このタイプのループはfor-eachループです。 for (JLabel l : labels)は、 "配列labelsの各JLabelについて、l"と述べています。 documentation here.

+0

これはどのように機能しますか? ':'が何をしているのか、そしてこのプログラムは何をしているのかを教えてください。 –

+1

@LakshyaGoyalそのような 'for-loop'は' for-each "ループと呼ばれます:[docs](http://docs.oracle.com/javase/1.5.0/docs/guide/language /foreach.html)。 ':'は "on"を意味するので、上の例は "ラベル上の各JLabel l"を読むことができます – Frakcool

+0

@Frakcoolありがとう! – GKFX

3

コンパイル時に正確な名前を知らずに変数を参照する方法はありません。

JLabel label0 = new JLabel(); 
JLabel label1 = new JLabel(); 
JLabel label2 = new JLabel(); 
JLabel label3 = new JLabel(); 
JLabel label4 = new JLabel(); 
JLabel label5 = new JLabel(); 
JLabel label6 = new JLabel(); 
JLabel label7 = new JLabel(); 
JLabel label8 = new JLabel(); 
JLabel label9 = new JLabel(); 

JLabel[] label = new JLabel[] { label0, label1, label2, label3, label4, label5, label6, label7, label8, label9 }; 
for (int i = 0; i < 10; i++) { 
    label[i].setText("label" + i); 
} 

そんなに(および可能なタイプミス)を入力しないようにするには、あなたが同様のループでラベルを作成することができます:配列(またはいくつかの他のコレクション)を使用している唯一のオプション

JLabel[] label = new JLabel[10]; 
for (int i = 0; i < 10; i++) { 
    label[i] = new JLabel(); 
    label[i].setText("label" + i); 
} 

することができますまだlabel[4]構文を使用して特定のラベルを参照してください。配列は0からインデックスされるので、label[0]が最初の要素であり、label[9]が10番目(最後)の要素であることに注意してください。

+0

これはいいようですが、私の質問は私が実際にやろうとしているものの単純化されたバージョンでした。私は '.setIcon'をやろうとしています。それであなたの方法はまだ機能しますか?また、私は 'JFrame'に10種類の' JLabels'を持っているので、ループの中で 'repaint()'と 'reValidate()'を呼び出さなければなりませんか? –

+1

'setIcon'は' setText'と同じように動作します。まったく、親コンポーネント(フレームまたはパネル)で 'repaint()'と 'revalidate()'を呼び出すことをお勧めします。すべてのラベルの変更が完了したら、これを一度行うことができます。 –

関連する問題