2013-05-11 5 views
0

У меня есть этот код в Java в событии с кнопками, я добавляю метки в панель, проблема в том, что когда я пытаюсь получить доступ к свойству, подобному расположению X элемента моего массива JLabels это дает мне NullPointerException, но когда я делаю это в другой кнопке после добавления ярлыков, это работает!Добавить ярлыки на панель при нажатии кнопки

Как я могу получить местоположение x метки mi при нажатии кнопки?

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 
+0

Вы указываете «Ошибка», но не указываете сообщение об ошибке. Пожалуйста, опубликуйте это также. –

+0

1) Для лучшей помощи раньше, отправьте сообщение [SSCCE] (http://sscce.org/). 2) Всегда копировать/вставлять вывод ошибок и исключений. , –

ответ

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++) 
2

Вы используете «магическое» число, и следует избегать делать это, но что более важно, вы должны понимать, что массивы в Java являются 0 на основе, то есть массив из 8 элементов идет от item 0 to item 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]); 
    } 

Do:

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 ,

0

Вы превышают предел массива gridLabels. Вы заполняете массив от 0 до 6, а не 7.