0

ボタンイベントでJavaにこのコードがあり、パネルにラベルを追加します。問題は、JLabelsの配列の要素のX位置のようなプロパティにアクセスしようとするとNullPointerException、ラベルを追加した後、別のボタンでそれが機能します!

ボタンを押したときに mi ラベルの x 位置を取得するにはどうすればよいですか?

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    gridLabels=new JLabel[8];
    panel.setLayout(new GridLayout(1,8));
    for (int i = 0; i <  7; i++) 
    {
       gridLabels[i]=new JLabel(); 
       panel.add(gridCartasJ1[i]);
     }
int X = gridLabels[7].getX(); //<---Error
4

3 に答える 3

2

「マジック」ナンバーを使用しているため、これを避ける必要がありますが、さらに重要なことは、Java の配列は 0 ベースであること、つまり 8 項目の配列が項目 0 から項目 7 に移動することを理解する必要があることです。取得しようとしています。配列の制限を超えたアイテム。

だからというより

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    gridLabels=new JLabel[8];
    panel.setLayout(new GridLayout(1,8));
    for (int i = 0; i <  7; i++) 
    {
       gridLabels[i]=new JLabel(); 
       panel.add(gridCartasJ1[i]);
    }

行う:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    gridLabels=new JLabel[8];
    panel.setLayout(new GridLayout(1,8));
    for (int i = 0; i <  gridLabels.length; i++) 
    {
       gridLabels[i]=new JLabel(); 
       panel.add(gridCartasJ1[i]);
    }

また、ArrayIndexOutOfBounds 例外が発生するため、長さの値以上の配列項目を使用しないでください。

于 2013-05-11T23:28:02.813 に答える
0

はい、そうです...

gridLabels[0] から gridLabels[6] を初期化します

for (int i = 0; i <  7; i++) 

次に、gridLabels[7] に対処します。

int X = gridLabels[7].getX(); 

あなたはおそらくしたいです

for (int i = 0; i <=  7; i++) 

また

for (int i = 0; i <  8; i++) 
于 2013-05-11T23:27:19.833 に答える
0

gridLabels 配列の制限を超えています。7ではなく、配列0から6までを埋めています。

于 2013-05-11T23:29:47.033 に答える