簡體   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