繁体   English   中英

Java:更新ArrayList中的GUI元素

[英]Java: Updating a GUI element in an ArrayList

我必须为最终的Java学校作业创建一个游戏。 在其中,我用一个在循环中扩展JComponent定制“ Peg”对象填充了一个JPanel 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删除一个元素,让我们成为第一个元素;
  • 将新的“钉”添加到以前的“钉”所在的位置(当然,假设它最终将驻留在原来的“钉”所在的位置,并且其他所有对象都将向右移动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时起作用,但是第二次却不起作用。

任何指导技巧将不胜感激。 如果有帮助,请参见以下完整代码:

我觉得很傻,但是我想我能够弄清楚。 在向数组添加新的“ Peg”并将其传递给JPanel之后,我正在调用update() 通过现在调用revalidate() ,新的“钉”将添加到面板中。 希望这可以帮助其他有类似问题的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM