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