[英]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
刪除一個元素,讓我們成為第一個元素; 另外,我嘗試使用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.