我正在將一個對象數組添加到JFrame上。當我在JFrame中更改對象的狀態時,它在數組中不會更改。該對象的類名爲connect2。我所做的更改是將connect2的arrayPosition字段增加1.更改是添加到JFrame的對象而不是相應的數組。爲什麼數組對象在添加到JFrame中時發生更改?
的算法如下:
CONNECT1延伸的JFrame和包含調用CONNECT1構造的主要方法。 connect1構造函數設置JFrame的大小,將JFrame設置爲可見,設置GridLayout,並實例化100個也是JPanel的connect2對象,並將它們添加到數組中。 100個connect2 JPanel通過for循環添加到JFrame中。
connect2構造函數需要connect1參數。當點擊connect2時,它會增加connect1的靜態計數器字段。計數器的值傳遞給connect2的數組變量。
由於某些原因,當我訪問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);
}
}
同一個對象同時在框架和數組中,因此它被更新。你給了什麼投入,你期望什麼產出? – vandale
vandale,我要修改我的問題以詳細說明我的意見。 – Tito