我正在将一个对象数组添加到JFrame上。当我在JFrame中更改对象的状态时,它不会在数组中更改。对象的类称为 connect2 。我所做的更改是将connect2的arrayPosition字段增加1.对添加到JFrame的对象进行更改,但不对相应的数组进行更改。
算法如下:
connect1 扩展了JFrame并包含调用 connect1 构造函数的main方法。 connect1构造函数设置JFrame的大小,将JFrame设置为visible,设置GridLayout,并实例化100个也是JPanels的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);
}
}
}
Connect2类:
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);
}
}
答案 0 :(得分:0)
看看refr = refresh;声明。该语句位于arrayPosition = refr.counter下面。