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 到 6,而不是 7。

于 2013-05-11T23:29:47.033 回答
0

嗯,是...

您通过 gridLabels[6] 初始化 gridLabels[0]

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 回答