我必须为我最后的 Java 学校作业创建一个游戏。在其中,我使用在 for 循环JPanel
中扩展的定制“Peg”对象填充一个。使用. JComponent
_ 在 for 循环中,我将“Peg”对象添加到 中,然后从中获取元素并将其添加到. 这一切都是在一个看起来像这样的方法中完成的:JPanel
GridBagLayout
ArrayList
ArrayList
JPanel
public void createDummyPegs()
{
for (int i = 0; i < 13; i++)
{
initPegsArray.add(new ArrayList<>());
dummyPegsConstraints.gridy = i;
for (int j = 0; j < 5; j++)
{
dummyPegsConstraints.gridx = j;
if (i == 0)
{
tempColorPeg = new ColorPeg(Color.DARK_GRAY);
initPegsArray.get(i).add(j, tempColorPeg);
pegsLeftPanel.add((JComponent) initPegsArray.get(i).get(j),
dummyPegsConstraints);
}
else
{
tempDummyPeg = new DummyPeg();
initPegsArray.get(i).add(j, tempDummyPeg);
pegsLeftPanel.add((JComponent) initPegsArray.get(i).get(j),
dummyPegsConstraints);
}
}
}
}
这很好用,它很好地生成了这些“Peg”对象的网格。这就是问题所在:我有一个按钮,理想情况下应该将这些“Peg”对象中的一个替换为另一个颜色不同的“Peg”对象。当我单击按钮时,我:
- 使用新的不同颜色创建新的“Peg”对象;
- 从 中删除一个元素
ArrayList
,让我们第一个; - 将新的“Peg”添加到旧“Peg”曾经所在的位置(当然假设它最终将位于旧“Peg”曾经所在的位置,并且其他所有内容都将向右移动 1。
或者,我尝试使用该set()
方法仅使用新的“Peg”更新给定位置的元素。问题是当我添加新的“Peg”元素时,它似乎没有用大小初始化。将这个新的“Peg”发送到一个System.out.println()
语句以读取其中的内容,它会打印出:
com.rburgos.mastermindtestlayout.ColorPeg[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=]
我不明白为什么我第一次添加ArrayList
它可以工作,但第二次却不行。
任何指导提示将不胜感激。如果有帮助,这是完整的代码: