我必须为我最后的Java学校作业创建一个游戏。在其中我使用定制的“Peg”对象填充JPanel
,这些对象在for循环中扩展JComponent
。 JPanel
使用GridBagLayout
。在for循环中,我将“Peg”对象添加到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”对象。当我点击按钮I:
ArrayList
中移除元素,让我们成为第一个元素; 或者,我尝试使用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
它有效,但第二次没有。
非常感谢任何指导提示。如果有帮助,这是完整的代码:
答案 0 :(得分:1)
我觉得很傻,但我想我能搞清楚。向数组添加新的“Peg”并将其传递给JPanel后,我正在调用update()
。现在通过调用revalidate()
,新的“Peg”会被添加到面板中。希望这可以帮助其他人解决类似的问题。