Java:更新ArrayList中的GUI元素
我必须为我的最后一次Java学校作业制作一个游戏。在其中,我用定制的“Peg”对象填充Java:更新ArrayList中的GUI元素,java,swing,arraylist,jcomponent,Java,Swing,Arraylist,Jcomponent,我必须为我的最后一次Java学校作业制作一个游戏。在其中,我用定制的“Peg”对象填充JPanel,这些对象在for循环中扩展JComponent。JPanel使用GridBagLayout。在for循环中,我将“Peg”对象添加到ArrayList,然后从该ArrayList获取元素,并将其添加到JPanel。这一切都是通过一个如下所示的方法完成的: public void createDummyPegs() { for (int i = 0; i < 13; i++)
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);
}
}
}
}
我不明白为什么第一次添加到ArrayList
时它能工作,但第二次却不行
如有任何指导意见,将不胜感激。以下是完整的代码(如果有帮助):
update()
。通过调用revalidate()
现在新的“Peg”被添加到面板中。希望这能帮助其他人解决类似问题。ArrayList不会更新屏幕上的组件,它们之间没有连接。更新ArrayList
时,您还必须从屏幕上删除旧的peg,并将其替换为新的peg哦,是的,我知道。我实际上是将组件保存到ArrayList中,然后将ArrayList中的元素添加到JPanel中。如果您查看上面的代码pegsLeftPanel.add((JComponent)initPegsArray.get(i).get(j),dummyPegsConstraints)代码>这样做。当你更换它时呢?替换组件不会使用现有的组件约束。此外,组件大小也不会更新,直到父容器更新并以AgainCol布局,谢谢您的评论。我认为它可能帮助我解决了这个问题,但我需要继续测试以完全确定。
com.rburgos.mastermindtestlayout.ColorPeg[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=]