Java 为什么不';数组对象在添加到JFrame中时是否会发生更改?

Java 为什么不';数组对象在添加到JFrame中时是否会发生更改?,java,arrays,Java,Arrays,我将在JFrame上添加一个对象数组。当我在JFrame中更改对象的状态时,它在数组中没有更改。对象的类称为connect2。我所做的更改是将connect2的arrayPosition字段增加1。更改是在添加到JFrame的对象上进行的,而不是在相应的数组上 算法如下: connect1扩展了JFrame并包含调用connect1构造函数的main方法。connect1构造函数设置JFrame的大小,将JFrame设置为visible,设置GridLayout,并实例化100个同样是JPane

我将在JFrame上添加一个对象数组。当我在JFrame中更改对象的状态时,它在数组中没有更改。对象的类称为connect2。我所做的更改是将connect2的arrayPosition字段增加1。更改是在添加到JFrame的对象上进行的,而不是在相应的数组上

算法如下:

connect1扩展了JFrame并包含调用connect1构造函数的main方法。connect1构造函数设置JFrame的大小,将JFrame设置为visible,设置GridLayout,并实例化100个同样是JPanel的connect2对象,并将它们添加到数组中。100个connect2 JPanel通过for循环添加到JFrame

connect2构造函数接受connect1参数。单击connect2时,它将增加connect1的静态计数器字段。计数器的值被传递给connect2的arrayposition变量

由于某种原因,当我访问connect1中数组中的connect2对象时,arrayposition变量没有更改

有人能帮我解决这个问题吗?为什么数组中的对象没有改变呢。Java数组存储对象的内存位置,不是吗

这是我的密码:

package connect;

import java.awt.*;
import javax.swing.JFrame;

public class connect1 extends JFrame 
{
static int counter = 0;     
int M = 10;
int N = 10;
int Grid = M*N;
connect2 array[] = new connect2 [Grid];

private static final long serialVersionUID = 1L;

public static void main(String[] args) 
{
    new connect1();
}

public connect1()
{
    setVisible(true);
    setSize(1000, 1000);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new GridLayout(M, N));
    //add(new Welcome(this));
    //int Grid = M*N;
    //connect2 array[] = new connect2 [Grid];
    for (int j = 0; j < Grid; j++)
    {
        array[j] = new connect2(this);
        add(array[j]);
    }
}

public void toRefresh()
{
    if (counter > 0)
    {
        bubbleSort(array);
    }

    repaint();
}

public void bubbleSort(connect2[] x)
{
    connect2 temp;
    for (int i = 0; i < /*x.length*/ counter - 1; i++)
    {
        for (int j = 1; j < /*x.length*/ counter - i; j++)
        {
            //System.out.println(x[j - 1].arrayPosition+" j - 1 "+x[j].arrayPosition+" j ");
            if (x[j - 1].arrayPosition > x[j].arrayPosition)
            {
                temp = x[j - 1];
                x[j - 1] = x[j];
                x[j] = temp;
            }

        }
    }
}

public void undo()
{
    for (int i = 0; i < array.length; i++)
    {
        System.out.println(array[i].arrayPosition);
    }
}

}

看看refr=refresh;陈述此语句位于arrayPosition=refr.counter下面

帧和数组中都有相同的对象,因此会对其进行更新。你给出了什么样的输入,你期望得到什么样的输出?vandale,我将修改我的问题,详细说明我的输入。
package connect;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;


public class connect2 extends JPanel
{
    private static final long serialVersionUID = 1L;

int arrayPosition;
int whenClicked = 0;
connect1 refr = null;


public connect2(connect1 refresh)
{
    addMouseListener(new MouseListener()
    {

        @SuppressWarnings("static-access")
        @Override
        public void mouseClicked(MouseEvent arg0) 
        {
            if(arg0.getModifiers() == MouseEvent.BUTTON1_MASK)
            {
                whenClicked++;
                refr.counter++;
                arrayPosition = refr.counter;
                refr.toRefresh();
            }

            if(arg0.getModifiers() == MouseEvent.BUTTON3_MASK)
            {
                System.out.println(arrayPosition);
                refr.undo();                
            }
        }

        @Override
        public void mouseEntered(MouseEvent arg0) 
        {
            // Not used 
        }

        @Override
        public void mouseExited(MouseEvent arg0)
        {
            // Not used     
        }

        @Override
        public void mousePressed(MouseEvent arg0) 
        {
            // Not used     
        }

        @Override
        public void mouseReleased(MouseEvent arg0)
        {
            // Not used     
        }

    });

    refr = refresh;
}

@Override
protected void paintComponent(Graphics g)
{
    switch(whenClicked)
    {
      case 1:
        g.setColor(Color.red);
        break;

      case 2:
        g.setColor(Color.blue);
        break;
    }
        g.fillOval(0, 0, 80, 80);
}


}